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