如何转储超过 on chrome / chromium headless?

问题描述 投票:7回答:1

Chrome的文档说明:

--dump-dom标志将document.body.innerHTML打印到stdout:

根据标题,如何将更多的DOM对象(理想情况下全部)转移到Chromium无头?我可以通过开发人员工具手动保存整个DOM,但我想要一个程序化的解决方案。

dom chromium google-chrome-headless
1个回答
4
投票

更新2019-04-23谷歌在无头前线非常活跃,并且发生了许多更新

以下答案适用于v62当前版本为v73,并且它一直在更新。 https://www.chromestatus.com/features/schedule

我强烈建议检查木偶操作者是否有无头铬的未来发展。它由Google维护,它与npm package一起安装所需的Chrome版本,因此您只需使用文档的puppeteer API,而不用担心Chrome版本并设置无头Chrome和开发工具API之间的连接,这样可以实现99%的魔力。


更新2017-10-29 Chrome已经--dump-html标志返回完整的HTML,而不仅仅是正文。

v62确实拥有它,它已经在稳定的通道上。

解决这个问题:https://pptr.dev/

当前的chrome状态(每个通道的版本)https://bugs.chromium.org/p/chromium/issues/detail?id=752747

遗留旧答案

你可以使用谷歌浏览器远程界面。我试过它并浪费了几个小时试图启动chrome并获得完整的HTML,包括标题,它还没有准备好,我想说。

它有时工作,但我试图在生产环境中运行它,并不时得到错误。所有类型的随机错误,如https://www.chromestatus.com/features/scheduleconnection reset。这些错误有时会上升,而且很难调试。

当我需要身体时,我个人使用no chrome found to kill获取HTML,当我需要标题时,我现在只使用--dump-dom。当然chrome可以从SPA应用程序中为您提供标题,如果从JS设置标题,则无法仅使用curl。在有稳定的解决方案后会切换到谷歌浏览器。

很想在chrome上使用curl旗帜并获得所有HTML。如果Google的工程师正在阅读此内容,请将此标记添加到Chrome。

我在Chrome问题跟踪器上创建了问题,请点击收藏的“明星”以获得Google开发人员的注意:

--dump-html

这里是chrome的所有类型标志的长列表,不确定它是否已满并且所有标志:https://bugs.chromium.org/p/chromium/issues/detail?id=752747没有转储标题标记。

此代码来自Google的博文,您可以试试运气:

https://peter.sh/experiments/chromium-command-line-switches/

资料来源:const CDP = require('chrome-remote-interface'); ... (async function() { const chrome = await launchChrome(); const protocol = await CDP({port: chrome.port}); // Extract the DevTools protocol domains we need and enable them. // See API docs: https://chromedevtools.github.io/devtools-protocol/ const {Page, Runtime} = protocol; await Promise.all([Page.enable(), Runtime.enable()]); Page.navigate({url: 'https://www.chromestatus.com/'}); // Wait for window.onload before doing stuff. Page.loadEventFired(async () => { const js = "document.querySelector('title').textContent"; // Evaluate the JS expression in the page. const result = await Runtime.evaluate({expression: js}); console.log('Title of page: ' + result.result.value); protocol.close(); chrome.kill(); // Kill Chrome. }); })();

© www.soinside.com 2019 - 2024. All rights reserved.