Headless Chrome入门

Headless Chrome入门HeadlessChro 指在 headless 模式下运行谷歌浏览器 本质就是不用谷歌运行谷歌 它将由 Chromium 和 Blink 渲染引擎提供的所有现代网页平台的特征都转化成了命令行 它有什么用 Headless 浏览器是一种很好的工具 用于自动化测试和不需要可视化用户界面的服务器 例如 你想在一个网页上运行一些测试 从网页创建一个 PDF 或者只是检查浏览器怎样递交 URL

Headless Chrome指在headless模式下运行谷歌浏览器。本质就是不用谷歌运行谷歌!它将由Chromium和Blink渲染引擎提供的所有现代网页平台的特征都转化成了命令行。

它有什么用?

Headless浏览器是一种很好的工具,用于自动化测试和不需要可视化用户界面的服务器。例如,你想在一个网页上运行一些测试,从网页创建一个PDF,或者只是检查浏览器怎样递交URL。

警告:在Mac和Linux上的Chrome 59可以运行Headless模式。支持Windows的会很快提供。

开始Headless(命令行界面)

——————————————————————————————————————————————————————

开始headless模式的最简单方式就是用命令行打开谷歌浏览器。如果你已经安装了Chrome 59以上版本,用–headless命令打开:

Headless Chrome入门

注意:–disable-gpu命令是暂时需要,最后会消失。

chrome命令必须指向你的谷歌浏览器的安装路径。不同的系统有不同的路径。因为我在Mac上安装,我给每个已经安装的谷歌浏览器版本都起了别名(aliase)。

Headless Chrome入门

命令行界面

—————————————————————————————————————————————

有时候,你也许不需要在Headless Chrome中运行编程脚本。下面是一些有用的执行常见任务的命令行指令。

注意:运行这些命令时你同时需要–disable-gpu命令。

打印DOM

–dump-dom命令打印document.body.innerHTML到标准输出:

Headless Chrome入门

创建PDF

–print-to-pdf命令从网页创建一个PDF:

Headless Chrome入门

截图

获得一个页面的截图,使用–screenshot命令:

Headless Chrome入门

使用–screenshot命令会在当前工作目录中保存截图为screenshot.png。如果你想给整个页面截图,会有点复杂。有一个很好的博客可以解决你的问题,作者是David

Schnurr ,题目为《把headless Chrome作为一个自动截图工具》。

不用浏览器用户界面调试谷歌浏览器?

——————————————————————————————————————————————————————

当你用–remote-debugging-port=9222命令打开谷歌浏览器时,DevTools协议会被激活。该协议用于与谷歌浏览器内核进行交互和驱动headless浏览器实例。它也可以像Sublime、VS

Code和Node一样用来远程调试一个程序。

因为没有浏览器用户界面用来看网页,你需要在另一个浏览器中连接到http://localhost:9222来确保一切正常。你会看到一列可检查的网页,可以点击它们并看到使用了哪种Headless渲染。

Headless Chrome入门

用DevTools远程调试用户界面

从这开始,你可以像往常一样用熟悉的DevTools来检查、调试和调整网页了。如果你要用Headless编程模式,这个页面也会是一个有力的调试工具,让所有原始DevTools协议命令穿过电线,与浏览器进行交流。

使用编程模式(Node)

——————————————————————————————————————————————————————

打开谷歌浏览器

在之前的部分,我们使用–headless –remote-debugging-port=9222命令手动打开谷歌。然而,为了全自动测试,你可能需要在应用程序中批量打开谷歌浏览器。

一种方式是用child_process:

Headless Chrome入门

但是当你需要一个可以跨平台运行的方案时,事情就变得复杂了。请看Chrome的硬编码。

使用Lighthouse的ChromeLauncher模块

——————————————————————————————————————————————————————

Lighthouse是一种用来测试Web应用的神奇工具。人们没有意识到的一件事是它配置了一些很有用的工作在谷歌浏览器上的模块。其中一个就是ChromeLauncher。ChromeLauncher可以找到谷歌浏览器的安装位置,建立一个调试实例,启动浏览器,在程序完成后杀掉实例。最棒的是由于Node它可以跨平台工作!

注意:Lighthouse团队正在为 ChromeLauncher 探索一个有改进的API的独立的包。如果你有任何反馈请告诉我们。

默认情况下,ChromeLauncher 会启动金丝雀(Canary)版Chrome(如果它安装了),但是你可以手动选择默认使用哪个版本。为了使用它,首先要从npm上安装Lighthouse:

Headless Chrome入门

例子——用ChromeLauncher启动Headless模式

Headless Chrome入门

运行这个脚本不会做很多事,但是你可以在任务管理器中看到,谷歌浏览器启动了一个加载about:blank的实例。记住,不会有任何浏览器用户界面。我们是headless的。

为了控制浏览器,我们需要DevTools协议!

检索网页信息

——————————————————————————————————————————————————————

chrome-remote-interface是一个很好的Node包,提供了一些基于DevTools协议的高级API。你可以用它来编排Headless Chrome,导航到网页,并获取这些网页的信息。

警告:DevTools协议可以做很多有趣的事情,但是刚开始使用会有些艰难。我建议先花一点时间浏览《DevTools Protocol API Viewer》,然后阅读《chrome-remote-interface API》来学习它是如何封装原始协议的。

让我们安装这个包:

Headless Chrome入门

例子

例子——打印用户代理

Headless Chrome入门

得到如下形式的结果:HeadlessChrome/60.0.3082.0

例子——检查网站是否有Web应用清单

Headless Chrome入门

例子——用DOM API提取网页

Headless Chrome入门

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207856.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:56
下一篇 2026年3月19日 下午12:56


相关推荐

  • matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

    matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

    2022年2月20日
    67
  • CAN总线详解

    1、简介CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。优点:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格越来越低。Ø低成本:ECUs通过单个CAN接口进行通信,布线成本低。Ø高集成:CAN总线系统允许在所有ECUs上进行集中错误诊…

    2022年4月6日
    83
  • WSL2环境下的Claude Code与lanyuncodingui安装与配置

    WSL2环境下的Claude Code与lanyuncodingui安装与配置

    2026年3月15日
    2
  • c socket

    c socket"1.socke分类""2.基本操作函数""3.c实现的网络聊天程序"套接字(socket)是一个抽象层,应用程序可以通过它发送或接

    2022年7月3日
    30
  • 临界段CCriticalSection的使用[通俗易懂]

    临界段CCriticalSection的使用[通俗易懂]类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区。临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用。比如,在链表中添加�一个结点就仅仅同意一次一个线程进行。通过使用CCriticalSection对象来控制链表,就能够达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了执行线程的权力,而把其…

    2022年7月20日
    12
  • 白盒测试用例设计方法有哪些_软件测试语句覆盖测试用例

    白盒测试用例设计方法有哪些_软件测试语句覆盖测试用例白盒测试设计方法编写:天林问题:白盒测试方法的概念及应用场景白盒测试方法用各种逻辑覆盖法来和设计白盒测试用例使用基本路径法来设计白盒测试用例内容:白盒测试的基本介绍白盒测试用例设计方法静态设计方法动态设计方法一、白盒测试的概念及特点1、什么是白盒测试代码逻辑的测试白盒测试,又称结构测试、逻辑驱动测试或基于程序代码内部构成的测试。此时,测试工程师需深入考察程序代码的内部结构、逻辑设计等。对于白盒测试工程师来说,软件产品内部构成是透明的。下列代码是

    2022年10月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号