Posted by
alistairgrant on
May 19, 2017; 3:39pm
URL: https://forum.world.st/Chrome-DevTools-Protocol-and-Pharo-tp4947589p4947655.html
On Fri, May 19, 2017 at 01:50:28PM +0200, Torsten Bergmann wrote:
> Alistair Grant wrote
>
> > This looks really interesting, thanks for making it available. I'm on
> > linux, so I guess it will need some porting.
>
> I added support for Linux and tried on Ubuntu with Chromium. Works - see screenshot
Fantastic, thanks!
I did have to change your script for it to work on my laptop:
1. isInDebugMode is false by default, which meant that chrome wasn't
launched with remote debugging enabled.
2. Retrieving the remotes in GoogleChrome class>>tabPages failed because
the browser hadn't had time to start up. I'll submit a pull request
which adds a retry with delay.
3. I initially got a white image. This appears to be because the script
doesn't wait for the navigation to complete before taking the
screenshot. I just added an ugly delay, but I'm not yet sure what the best
solution here is.
| chrome page |
chrome := GoogleChrome new
debugOn;
open;
yourself.
page := chrome tabPages first.
page navigateTo: '
http://www.pharo.org'.
(Delay forSeconds: 5) wait.
page captureScreenshot scaledToSize: 200@300.
> You need to load my OSLinux package (instead of OSOSX) from catalog. Or start
> Chrom manually in debug mode.
>
> In the Pharo settings browser you can set the path to the chrome executable
> and the debug port to use.
I doubt that the chrome executable is in that many different places.
Would you be open accepting a pull request which adds (what I assume is)
the Ubuntu 16.04 default location?
> Will add Windows support as well (using my OSWindows package)
>
> > Do you know how the DevTools protocol relates to headless chome, which
> > will be available in Chrome 59?
> > See
https://developers.google.com/web/updates/2017/04/headless-chrome>
> Dont know - just try it.
>
> > In particular, is it possible to dump the DOM with your package?
>
> I've seen that Brackets editor as well as Netbeans open Chrome to
> display webpages when editing and refresh when typing. Wanted
> to find out how it was done.
>
> I have not implemented the full protocol. Only what was needed to show
> that it is possible and to do things like grabbing screenshots from websites
> using Pharo.
I've found a page that describes accessing the DOM, so it looks like it
should be possible. I'll see what I can do...
> There is a DOM domain that one could wrap - basically it is just
> sending JSON around, see
>
https://chromedevtools.github.io/devtools-protocol>
> With
>
> chrome := GoogleChrome open.
> chrome jsProtocolJSON.
> chrome browseProtocolJSON
>
> you can now even retrieve the Protocol as JSON for the specific browser.
> With a little bit more work it should be possible to even generate
> the wrapper classes/methods from such a protocol spec.
Thanks again,
Alistair