Web自动化之Headless Chrome开发工具库
命令行运行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 https://www.baidu.com
使用无界面模式启动Chrome打开百度首页(无界面),但不到浏览器界面打开,但任务栏会有图标
chrome --headless https://www.baidu.com
使用无界面模式启动Chrome并将页面转为PDF,可以看到
output.pdf的输出chrome --headless --print-to-pdf https://www.baidu.com
使用无界面模式启动Chrome并截图,可以看到
screenshot.png的输出chrome --headless --screenshot --window-size=414,736 https://www.baidu.com/
使用无界面模式启动Chrome并打开交互环境
chrome --headless --repl
使用无界面模式启动Chrome,并开启调试Server
chrome --headless --remote-debugging-port=9222
命令行操作Headless Chrome
确保已经启动Headless Chrome,并启用了调试Server
chrome --headless --remote-debugging-port=9222
安装
chrome-remote-interfacenpm install chrome-remote-interface -g
查看命令说明,这里可以进行各种相关操作
$ chrome-remote-interface Usage: chrome-remote-interface [options] [command] Commands: inspect [options] [<target>] inspect a target (defaults to the first available target)
list list all the available targets/tabs
new [<url>] create a new target/tab
activate <id> activate a target/tab by id
close <id> 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 <host> HTTP frontend host
-p, --port <port> HTTP frontend port
-s, --secure HTTPS/WSS frontend
打开一个新页面
chrome-remote-interface new https://www.baidu.com
查看刚打开的页面
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);
})
});
Web自动化之Headless Chrome开发工具库的更多相关文章
- Web自动化之Headless Chrome概览
Web自动化 这里所说的Web自动化是所有跟页面相关的自动化,比如页面爬取,数据抓取,页面内容检测,页面功能测试,页面加载性能测试,页面回归测试等等,当前主要由如下几种解决方式: 文本数据获取 这就是 ...
- Web自动化之Headless Chrome编码实战
API 概览 && 编码Tips 文档地址 github Chrome DevTools Protocol 协议本身的仓库 有问题可以在这里提issue github debugger ...
- Web自动化之Headless Chrome测试框架集成
使用Selenium操作headless chrome 推荐 简介 WebDriver是一个W3C标准, 定义了一套检查和控制用户代理(比如浏览器)的远程控制接口,各大主流浏览器来实现这些接口以便调用 ...
- Chrome 开发工具指南
Chrome 开发工具指南 谷歌 Chrome 开发工具,是基于谷歌浏览器内含的一套网页制作和调试工具.开发者工具允许网页开发者深入浏览器和网页应用程序的内部.该工具可以有效地追踪布局问题,设置 Ja ...
- Chrome 开发工具之Sources
Sources面板主要用于查看web站点的资源列表及javascript代码的debug 熟悉面板 了解完面板之后,下面来试试这些功能都是如何使用的. 文件列表 展示当前页面内所引用资源的列表,和平常 ...
- Chrome 开发工具之 Memory
开发过程中难免会遇到内存问题,emmm... 本文主要记录一下Chrome排查内存问题的面板,官网也有,但有些说明和例子跟不上新的版本了,也不够详细... !!! 多图预警!!! 简单的内存 ...
- Chrome 开发工具之Timeline
之前有说到Element,Console,Sources大多运用于debug,Network可用于debug和查看性能,今天的主角Timeline更多的是用在性能优化方面,它的作用就是记录与分析应用程 ...
- Chrome 开发工具之Console
前段时间看git的相关,记的笔记也大致写到了博客上,还有些因为运用不熟,或者还有一些疑惑点,暂时也不做过多纠缠,之后在实践中多运用得出结论再整理分享吧. 工欲善其事,必先利其器.要想做好前端的工作,也 ...
- Chrome开发工具之Console
Chrome开发工具-Console 看了别人的博客,才发现在百度主页用开发工具“Console”可以看到百度的招聘信息 前端调试工具可以按F12打开,谷歌的开发工具中的Console面板可以查看错误 ...
随机推荐
- Servlet开篇
Servlet开篇 前面我已经说过好多遍了,如何学习好一个东西其实就是2个问题: 1,这个东西是干嘛的?为什么要玩这个东西? 2,怎么样就玩好这个东西了?具体的应该玩这个东西的什么? 其实现在对于我来 ...
- PHP7.1 报错 Warning Illegal string offset
报错如下: Warning: Illegal string offset '阿根廷' in F:\wnmp\www\test.php on line 24 Warning: Illegal strin ...
- C++ 指针大小
32 位机: 指针大小 sizeof(void*)4字节,32位.例如:0x12345678 64位机: 指针大小: sizeof(void*)8字节,64位.一般只用48位,指针形如:0x12345 ...
- PHP获取客户端和服务器端IP(转)
客户端的ip变量: $_SERVER['REMOTE_ADDR'] :客户端IP,也有可能是代理IP $_SERVER['HTTP_CLIENT_IP']:代理端的IP,可能存在,也可能伪造 $_SE ...
- CentOS修改Tomcat端口号
Linux下修改Tomcat默认端口 1.方法一 假设tomcat所在目录为/usr/local/apache-tomcat/ 1.打开tomcat配置文件 # vi /usr/local/apach ...
- jQuery Validate验证框架与 jQuery ajaxSubmit的联合使用
jQuery Validate验证框架自定义验证 第一步导入导入js库 <script src="<%=basePath%>static/js/jquery.js" ...
- Storm Topology Parallelism
Understanding the Parallelism of a Storm Topology What makes a running topology: worker processes, e ...
- oracle光标的使用
以下plsql程序用的scott用户的dept,emp表. 1.光标的使用: --查询并打印员工的姓名名和薪水 /* 光标属性: %found %notfound */ set serveroutpu ...
- Tomcat修改端口号(7.0 version)
目的:有时端口号可能其他服务占用,就需要修改一下Tomcat的端口号,避免冲突. 自我总结,有什么需要改正的地方,请大家补充,感激不尽! 找到Tomcat的的配置文件server.xml 路径:%to ...
- nodejs cluster模块初探
大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,为了使用多核cpu来提高性能 就有了cluster,让node可以利用多核CPU实现并行 ...