Headless Chrome指在headless模式下运行谷歌浏览器。本质就是不用谷歌运行谷歌!它将由Chromium和Blink渲染引擎提供的所有现代网页平台的特征都转化成了命令行。
它有什么用?
Headless浏览器是一种很好的工具,用于自动化测试和不需要可视化用户界面的服务器。例如,你想在一个网页上运行一些测试,从网页创建一个PDF,或者只是检查浏览器怎样递交URL。
警告:在Mac和Linux上的Chrome 59可以运行Headless模式。支持Windows的会很快提供。
命令行运行Headless Chrome
Chrome 安装(需要带梯子)
下载地址
几个版本的比较
Chromium 不是Chrome,但Chrome的内容基本来源于Chromium,这个是开源的版本,小时级别的更新
Canary 是试验版,翻译过来就是金丝雀,金丝雀对瓦斯等毒气很敏感,浓度稍高就会停止鸣叫甚至挂掉,金丝雀是瓦斯等毒气检测的土办法,这个场景在《寻龙诀》中黄渤的操作中也能看到。哈哈 扯远了,这个是daily build 版本。
Dev 是开发版,weekly build版本
Beta 是测试版,monthly build版本
Stable 是稳定版,不定期更新,一般也是一个月左右一次
更新频率 Chromium > Chrome Canary > Chrome Dev > Chrome Beta > Chrome Stable
Chrome Dev、Chrome Beta 和 Chrome Stable三者只能同时出现一个
Chromium 、Chrome Canary 和 剩下的任意一个可共存
Windows平台下载下来的可能只是一个在线安装的程序,下载离线版在下载页面的URL里面加参数
standalone=1
命令行快捷配置(Mac环境)
在~/.bashrc
中加入
alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome" alias chrome-canary="/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary"
重新打开终端,我们就可以直接通过 chrome
打开稳定版的Chrome,chrome-canary
打开试验版的Chrome了。
命令行启动Chrome
参考官方说明, Headless模式需要Chrome Version >= 59
使用Chrome打开百度首页(带界面),能看到浏览器的打开
chrome
使用无界面模式启动Chrome打开百度首页(无界面),但不到浏览器界面打开,但任务栏会有图标
chrome --headless
使用无界面模式启动Chrome并将页面转为PDF,可以看到
output.pdf
的输出
chrome --headless --print-to-pdf
使用无界面模式启动Chrome并截图,可以看到
screenshot.png
的输出
chrome --headless --screenshot --window-size=414,736
使用无界面模式启动Chrome并打开交互环境
chrome --headless --repl
使用无界面模式启动Chrome,并开启调试Server
chrome --headless --remote-debugging-port=9222
参考 Chrome命令行参数列表
命令行操作Headless Chrome
确保已经启动Headless Chrome,并启用了调试Server
chrome --headless --remote-debugging-port=9222
安装
chrome-remote-interface
npm install chrome-remote-interface -g
查看命令说明,这里可以进行各种相关操作
"
$ chrome-remote-interface
Usage: chrome-remote-interface [options] [command] Commands: inspect [options] [b4bef09dd2761803871f1d83e55d08b2] inspect a target (defaults to the first available target) list list all the available targets/tabs new [9bb6a7d109b3f2bf35f7e2e9bd87f98a] create a new target/tab activate 53384f78b45ee9f1e3082cf378b9c5b4 activate a target/tab by id close 53384f78b45ee9f1e3082cf378b9c5b4 close a target/tab by id version show the browser version protocol [options] show the currently available protocol descriptor Options: -h, --help output usage information -t, --host f7e6dec31ab1a0471d06c55afaca8d77 HTTP frontend host -p, --port 298c9bd6ad6e8c821dc63aa0473d6209 HTTP frontend port -s, --secure HTTPS/WSS frontend
"
打开一个新页面
chrome-remote-interface new
查看刚打开的页面
chrome-remote-interface inspect
查看当前页面的URL
>>> Runtime.evaluate({expression:'location.href'})
可编程方式运行Headless Chrome
直接通过代码调用命令行启动Chrome 调试Server
可以通过系统调用的方式直接调用上面的命令行执行方式。这种方式在跨平台的情况下会有一些工作需要做。
Google出品的Lighthouse 这个网页质量检查工具,有一个组件专门做这事,考虑了各种平台的兼容性问题,源码参考lighthouse-chromelauncher,这个组件现在已经单独独立出来,作为一个单独的NPM
组件chrome-launcher
,可以直接使用这个在Node
平台下调用,其他平台的也可以此为参考。
const chromeLauncher = require('chrome-launcher');//启用无界面模式并开启远程调试,不同引用版本和方式,调用方式可能有些区别//chromeLauncher.run({chromeLauncher.launch({// port: 9222,chromeFlags: ['--headless']}).then((chrome) => {// 拿到一个调试客户端实例console.log(chrome)chrome.kill();});
通过客户端的封装组件进行浏览器交互
实现了ChromeDevTools
协议的工具库有很多,chrome-remote-interface
是NodeJS的实现。
Chrome调试Server开启的是WebSocket交互的相关实现,要用编程的方式实现还需要封装一些WebSocket命令发送、结果接收等这一系列操作,这些chrome-remote-interface
已经帮我们做了,更多实例可以参考chrome-remote-interface的wiki。
const chromeLauncher = require('chrome-launcher');const chromeRemoteInterface = require('chrome-remote-interface')//启用无界面模式并开启远程调试,不同引用版本和方式,调用方式可能有些区别//chromeLauncher.run({chromeLauncher.launch({port: 9222,chromeFlags: ['--headless']}).then((launcher) => {chromeRemoteInterface.Version({host:'localhost',port:9222}).then(versionInfo => {console.log(versionInfo)});chromeRemoteInterface({host:'localhost',port:9222}).then((chrome) => {//这里调用ChromeDevToolsProtocol定义的接口const {Network,Page} = chrome;Network.requestWillBeSent((params) => {let {request} = params;let {url} = request;console.log(url)});Promise.all([Network.enable(),Page.enable() ]).then(() => {Page.navigate({url:'https://www.baidu.com'})});setTimeout(() => {launcher.kill()},5000);})});
以上是Headless Chrome开发工具库的实例介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能