Вызов Firefox: вспомогательная функция снимка экрана в консоли браузера с JavaScript - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь написать небольшой скрипт для копирования в веб-консоли активной страницы, и часть этого скрипта - сделать несколько скриншотов тела документа. Этот сценарий будет предназначен для личного использования, для очень специфической задачи c, поэтому я думаю, что не будет проблемой использовать встроенную вспомогательную функцию Firefox :screenshot вместо более кросс-совместимого решения.

Я прочитал этот вопрос о той же самой топике c, которая объясняет, почему невозможно вызвать такие вспомогательные функции из консоли веб-страницы в JavaScript. Но я подумал, что вместо этого я могу использовать консоль браузера Firefox, которая дает доступ ко всему браузеру. Опять же, я буквально просто копировал и вставлял функции в консоль, чтобы использовать их при взаимодействии со страницей, поэтому, если я могу вызвать функцию :screenshot программно из консоли браузера, мне просто нужно выяснить, как получить доступ к DOM определенную document или вкладку, и я получу тот же результат.

Я пытался импортировать и использовать html2canvas, но, скорее всего, это не сработало, потому что содержимое, которое я пытаюсь сделать снимок экрана, находится внутри shadow-root. Я знаю, что одна альтернатива - написать собственное расширение, но я бы хотел избежать такой работы для этой задачи. В конце концов, знаете ли вы, возможно ли добиться подобных результатов в браузере на базе Chromium (Brave)?

Большое спасибо: D

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Хорошей новостью является то, что да, вы можете вызывать функцию скриншота devtools из консоли браузера. Удобно выбранным по умолчанию узлом является тело документа.

(async()=>{
    const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
    const { gDevTools } = require("devtools/client/framework/devtools");
    const { TargetFactory } = require("devtools/client/framework/target");
    const target = await TargetFactory.forTab(gBrowser.selectedTab);
    const toolbox = await gDevTools.showToolbox(target, "inspector");
    const inspector = toolbox.getPanel("inspector");
    inspector.screenshotNode();
})()

Теперь плохие новости. Доступ к DOM страницы содержимого из консоли браузера невыносимо сложен: (

1 голос
/ 05 февраля 2020

Вы собираетесь решить проблему неправильно. Firefox начиная с версии 57 встроены инструменты для обеспечения того, что вы хотите. Для выполнения sh этого вы хотите использовать 1013 * режим без головы с Webdriver , если необходимо.

Простой пример из MDN:

/path/to/firefox -P my-profile -headless --screenshot https://developer.mozilla.org/

...