Сделайте скриншот Chrome с помощью инструментов разработчика Chrome?

можно ли захватить скриншот открытого окна с помощью удаленного отладчика Chrome Development Tools?

например, я подключаюсь к удаленному порту отладки, и у меня есть это код, который открывает пустое окно:

   private void sendWindowPop(int width, int height) throws
IOException {
       hsc.send("{"method": "Runtime.evaluate", "id": "
               + hsc.nextInt()
               + ", "params": {"
               + ""expression":
"window.open('about:blank','name','toolbar=0,scrollbars=0,"
               + "location=0,status=0,menubar=0,resizable=0,width="
               + width
               + ",height="
               + height
               + "');""
               + "}}");

(hsc - это мое соединение с отладчиком в http://localhost:9222)

затем я загружаю свой целевой URL с этим:

    private void loadPage(String uriString) throws IOException {
       hsc.send("{"method": "Page.open", "id": " +
       hsc.nextInt() + ", "params": {"url": "" + uriString + ""}}");
       hsc.waitFor(ChromeNotifications.PAGE_LOADEVENTFIRED, DEFAULT_TIMEOUT_MILLIS);
   }

код выше работает нормально, и сначала появляется окно, а затем загружается этот URL-АДРЕС. В идеале, следующее, что я хотел бы сделать скриншот загруженной веб-страницы. Прямо сейчас, эти окна всплывающие в Xvfb virtual desktop, и я могу использовать инструмент импорта ImageMagick для захвата скриншот целевого окна, но только если он в на переднем плане.

это проблема, так как это приложение предназначено для работы в параллельно с несколькими окнами, выскакивающими на виртуальный рабочий стол. Любой окно, перекрывающее мое целевое окно просто дай мне черный. скриншот, так как Xfvb отображает только то, что видно.

Я также посмотрел ссылку на API, chrome.вешалки.captureVisibleTab. Не повезло, он не захватывает то, что не видно.

есть ли способ, используя удаленный отладчик, захватить скриншот открыть окно?

(для справочных целей моя команда ImageMagick для импорта-это)

    DISPLAY=:0.0 import -window "Google - Chromium" screenshot.png

где я открываю URL http://www.google.com в моем браузер chromium с помощью loadPage () выше. Он отлично работает, пока окно "Google-Chromium", которое всплывает, свободно и имеет фокус. Опустите еще одно окно над его частью, и я получу большую черную область, которая не была отображена.

спасибо!

3 ответов


протокол удаленной отладки Chrome теперь поддерживает страница.captureScreenshot функции

вот пример в coffee-script

screenshot: (name, callback)=>
    safeName = name.replace(/[^()^a-z0-9._-]/gi, '_') + ".png"
    png_File = "./_screenshots".append_To_Process_Cwd_Path().folder_Create()
                               .path_Combine(safeName)

    @chrome._chrome.Page.captureScreenshot (err, image)->
      require('fs').writeFile png_File, image.data, 'base64',(err)->
         callback()

(фрагмент из https://github.com/TeamMentor/TM_4_0_Design/blob/Issue_80_Jade_Cleanup/QA/API/QA-TM_4_0_Design.coffee#L54)



Если вам нужно решение на основе Java, используйте cdp4j захват полная страница экран.

public static void main(String[] args) throws IOException, InterruptedException {
    SessionFactory factory = new Launcher().launch();

    Path file = createTempFile("screenshot", ".png");

    try (Session session = factory.create()) {
        session.navigate("https://webfolder.io");
        session.waitDocumentReady();
        byte[] data = session.captureScreenshot();
        write(file, data);
    }

    if (isDesktopSupported()) {
        getDesktop().open(file.toFile());
    }

    factory.close();
}

скриншот.java