源起
最近有个项目要用到headless,以前用过python Selenium。最近想试下go版本的。但是刚开始时候,发现一个坑。网上有部分代码是老版本的chromedp。新版本不通用,就记录下我的学习过程
chromedp 是什么?
广泛使用的headless browser解决方案PhantomJS已经宣布不再继续维护,转而推荐使用headless chrome
那么headless chrome究竟是什么呢,Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行您的程序。可以像在其他现代浏览器里一样渲染目标网页,并能进行网页截图,获取cookie,获取html等操作.
想要在golang程序里使用headless chrome,需要借助一些开源库,实现和headless chrome交互的库有很多,这里选择chromedp,接口和Selenium类似,易上手。
普通模式
普通模式会在电脑上弹出浏览器窗口,可以在浏览器中看到代码执行的效果,调用完成之后需要关闭掉浏览器。
chrome headless模式
chrome headless模式不会弹出浏览器窗口,并且你多次go run main.go
的时候, go 代码运行中断导致后台chrome headless不能退出,导致第二次本地调试失败, 此时解决方案就是自己手动结束chrome进程。
因此在调试go代码的时候不建议使用chrome headless模式。
一些浏览器参数
--no-first-run
第一次不运行---default-browser-check
不检查默认浏览器--disable-gpu
关闭gpu,服务器一般没有显卡remote-debugging-port
chrome-debug工具的端口(golang chromepd 默认端口是9222,建议不要修改)--no-sandbox
不开启沙盒模式可以减少对服务器的资源消耗,但是服务器安全性降低,配和参数--remote-debugging-address=127.0.0.1
一起使用--disable-plugins
关闭chrome插件--remote-debugging-address
远程调试
源起
最近有个项目要用到headless,以前用过python Selenium。最近想试下go版本的。但是刚开始时候,发现一个坑。网上有部分代码是老版本的chromedp。新版本不通用,就记录下我的学习过程
chromedp 是什么?
广泛使用的headless browser解决方案PhantomJS已经宣布不再继续维护,转而推荐使用headless chrome
那么headless chrome究竟是什么呢,Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行您的程序。可以像在其他现代浏览器里一样渲染目标网页,并能进行网页截图,获取cookie,获取html等操作.
想要在golang程序里使用headless chrome,需要借助一些开源库,实现和headless chrome交互的库有很多,这里选择chromedp,接口和Selenium类似,易上手。
普通模式
普通模式会在电脑上弹出浏览器窗口,可以在浏览器中看到代码执行的效果,调用完成之后需要关闭掉浏览器。
chrome headless模式
chrome headless模式不会弹出浏览器窗口,并且你多次go run main.go
的时候, go 代码运行中断导致后台chrome headless不能退出,导致第二次本地调试失败, 此时解决方案就是自己手动结束chrome进程。
因此在调试go代码的时候不建议使用chrome headless模式。
一些浏览器参数
--no-first-run
第一次不运行---default-browser-check
不检查默认浏览器--disable-gpu
关闭gpu,服务器一般没有显卡remote-debugging-port
chrome-debug工具的端口(golang chromepd 默认端口是9222,建议不要修改)--no-sandbox
不开启沙盒模式可以减少对服务器的资源消耗,但是服务器安全性降低,配和参数--remote-debugging-address=127.0.0.1
一起使用--disable-plugins
关闭chrome插件--remote-debugging-address
远程调试