Selenium 来讨论下无头浏览器吧!

李晔 · 2018年07月16日 · 最后由 with_a_kiss 回复于 2018年12月12日 · 3040 次阅读

启用无头浏览器的初衷:一、为了调试自动化脚本时能做其他事!二、为部署到 linux 环境做准备!

1、一开始用的是 phantomJS,嗯...开始感觉良好,但后面发现截图截得不全,上网查了下,有的说是 phantomJS 的 bug,也有的说不是 phantomJS 的锅,无论怎样我都不想再深究下去,因为现在开发者已经停止维护了,而且也听说最新的 selenium 已不支持 phantomJS!
2、接下来看到 chrome 有 headless(无头)模式,简直欣喜若狂啊,于是乎就立马实践,结果大部分用例错误,但切换有界面模式跑又是通过的!于是我用 headless 跑的时候在报错的点截图,一看恍然大悟...我一般跑脚本都是窗口最大化(drive.maximize_window()),而 headless 模式没有最大化,导致与系统的提示信息框刚好把我要点击的元素给挡住了!然后我又继续解决这个问题!添加 “start-maximized” 浏览器启动参数也没用(但在有界面模式又是能行的...);最后查了一个下午,添加 “'window-size=1700x938” 启动参数生效了,但欢喜中又带点不安,这个窗口大下是定死了的,要是放在其他不同显示屏的机子下又是另外番景象,难道真的没有 chrome headless 模式真的没有最大化的方法了吗?

共收到 10 条回复 时间 点赞

用 puppeteer+chromium

槽神 回复

js 啊,哎

我问问 回复

selenium 很多解决不了的问题最终还是 JS 强制搞定的啊,JS 没啥不好的
尤其是前后端分离的今天,selenium 一代反而是 e2e 测试的一种比较常见的方案了,一代也是以 JS 为核心的

我这边也遇到类似的问题,但是感觉是和代码里面写的隐式等待有关

window-size 这个参数放心的用,在不同尺寸显示器下也不会有问题。因为 headless 渲染的分辨率跟你的屏幕没有关系。

楼主可以尝试下设置个超大分辨率,比如 4000*3000,然后截个图看看最后效果就知道了

补充一下,
maximize_window() 本身是用的 W3C 自己实现的 maximized,

我不负责任的猜测应该是因为 headless 的实现本身也是类似于 remote 模式的缘故,所以这个模式下 window mgr 拿不到 window size 也应该是正常的.. start-maximized 应该也是这个问题吧~

可以把这个参数写活呀,在执行脚本前,获取这台机器的屏幕宽和高,执行脚本的时候传进去就可以了吧

启用无头浏览器的初衷:一、为了调试自动化脚本时能做其他事!二、为部署到 linux 环境做准备!

  1. 执行自动化脚本时,浏览器可以最小化,所以就算本地跑也基本不影响你做其他事。
  2. 部署其实你可以看看 Selenoid 或者 Zalenium . https://www.jianshu.com/p/29c7240e9f48
米阳MeYoung 回复

最小化?selenium 中的方法吗??我查了下说有"minimize_window() "这个,但实际查找不到这个方法!我的环境是 python3.5.0+selenium2.48.0

借用一下~~ 我的 selenium 在无头模式下无法下载文件,显示窗口就可以下载。。。
求大神解答一下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册