命令行运行HeadlessChromeChrome安装(需要梯子)下载地址几个版本对比Chromium不是Chrome,但是Chrome的内容基本来自于Chromium,这是一个开源版本,每小时级别更新金丝雀是试用版,翻译过来就是金丝雀。金丝雀对毒气和其他有毒气体非常敏感。如果浓度稍高,它就会停止嘟嘟声甚至挂断电话。Canary是一种用于气体和其他有毒气体检测的本地方法。这一幕在《寻龙诀》中黄渤的操作中也能看到。哈哈扯远了,这是每日构建版。Dev是开发版,weeklybuildversionBeta是测试版,monthlybuildversionStable是稳定版,不定期更新,一般一个月左右一次。Chromium>ChromeCanary>ChromeDev>ChromeBeta>ChromeStableChromeDev,ChromeBeta只有Chromium、ChromeCanary和其他任何一种可以同时与ChromeStable共存。下载的Windows平台可能只是一个在线安装程序。下载离线版,在下载页面的URL中添加参数standalone=1命令行快捷方式配置(Mac环境)添加aliaschrome="/Applications/Google\Chrome.app/Contents/MacOS/Google\Chrome"aliaschrome-canary="/Applications/Google\Chrome\Canaryin~/.bashrc.app/Contents/MacOS/Google\Chrome\Canary"重新打开终端,我们可以直接通过chrome打开稳定版Chrome,而chrome-canary打开Chrome的实验版。要从命令行启动Chrome,请参阅官方说明。Headless模式要求Chrome版本>=59。用Chrome打开百度首页(有界面),可以看到浏览器打开了。chromehttps://www.baidu.com以无界面模式启动Chrome百度首页(无界面),但打不开浏览器界面,但任务栏会有一个图标chrome--headlesshttps://www.baidu.com使用headless模式启动Chrome并将页面转为PDF,可以看到output.pdf的输出chrome--headless--print-to-pdfhttps://www.baidu.com使用无界面mode启动Chrome并截屏,可以看到screenshot.png的输出chrome--headless--screenshot--window-size=414,736https://www.baidu.com/交互环境chrome--headless--repl以headless模式启动Chrome并开启调试Serverchrome--headless--remote-debugging-port=9222参考Chrome命令行参数列表命令行操作HeadlessChrome确保HeadlessChrome已经开启启动并启用调试Serverchrome--headless--remote-debugging-port=9222安装chrome-remote-interfacenpminstallchrome-remote-interface-g查看命令说明,这里可以进行各种相关操作$chrome-remote-interfaceUsage:chrome-remote-interface[options][command]命令:inspect[options][]inspectatarget(defaultstothefirstavailabletarget)list列出所有可用的etargets/tabsnew[]创建一个新的target/tabactivate通过id激活一个target/tabclose通过id关闭一个target/tab可用的协议描述符选项:-h,--help输出使用信息-t,--hostHTTP前端主机-p,--portHTTP前端端口-s,--secureHTTPS/WSSfrontend打开一个新建页面chrome-remote-interfacenewhttps://www.baidu.com查看刚刚打开的页面chrome-remote-interfaceinspect查看当前页面的url>>>Runtime.evaluate({expression:'location.href'})以可编程的方式运行HeadlessChrome。通过代码直接调用命令行启动Chrome。调试服务器可以通过系统调用直接调用上述命令行执行方法。这种方法在跨平台的情况下需要做一些工作。Lighthouse是Google出品的网页质量检测工具,考虑到各个平台的兼容性问题,有一个组件专门用于此。源码参考lighthouse-chromelauncher。该组件现已独立开发为一个单独的npm组件chrome-launcher,在Node平台下可以直接调用,其他平台也可以参考。constchromeLauncher=require('chrome-launcher');//启用无界面模式并启用远程调试,不同的参考版本和方法,调用方式可能不同//chromeLauncher.run({chromeLauncher.launch({//端口:9222,chromeFlags:['--headless']}).then((chrome)=>{//获取调试客户端实例console.log(chrome)chrome.kill();});通过客户端的包那里有很多实现浏览器交互的ChromeDevTools协议的工具库,chrome-remote-interface是NodeJS的实现,ChromeDebugServer开放了WebSocket交互的相关实现,编程方式实现需要封装一些WebSocket命令发送chrome-remote-interface已经帮我们完成了这一系列的操作,比如接收结果等,更多例子可以参考chrome-remote-interfacewiki。constchromeLauncher=require('chrome-launcher');constchromeRemoteInterface=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);})});