Python -selenium 控制 chrome 遇到浏览器卡顿并卡住整个程序

2020-01-20 09:15:16 +08:00
 lasuar

用了 selenium 有好久了,卡住之后,连程序都停滞了,就像时间停止了一样,没有任何日志。。
这个问题一直没当回事,每次都是起多个浏览器,某个卡住了还有别的在工作,过了许久它又恢复了,查了下说是 chrome 的原因,使用别的浏览器说没有这个问题(未尝试),想来咨询下各位 zs 爬友~,现实中要找到 zs 爬友太难了,v 站真是个好地方~~感谢感谢

7453 次点击
所在节点    Python
17 条回复
lasuar
2020-01-20 09:17:04 +08:00
别的浏览器如 firefox、phantomjs
lasuar
2020-01-20 09:18:23 +08:00
比如等待某个元素最多 30s,卡住的表现就是它能等一天
SjwNo1
2020-01-20 09:25:34 +08:00
那就先尝试一下别的浏览器
shiran3f
2020-01-20 09:25:35 +08:00
我的处理方式很暴力,定时 kill 所有相关进程...你会发现 chrome 开了一堆进程。
wzwwzw
2020-01-20 09:55:31 +08:00
@shiran3f +1 我也是这样子处理的,每个任务周期结束之后杀掉所有 chrome 的进程,还有 chromedrvier 的进程,如果不涉及到复杂操作可以用 splash。
sxd96
2020-01-20 09:57:17 +08:00
selenium 不是专门做爬虫的,长时间跑确实会有问题。只能定时 kill 重启。

另外,可以试试 puppeteer
retanoj
2020-01-20 10:25:57 +08:00
@shiran3f
定期 kill 进程+1
lasuar
2020-01-20 10:33:54 +08:00
@shiran3f 我先尝试别的浏览器试试
@sxd96 puppeteer 不也是控制 chrome 的吗
lasuar
2020-01-20 11:56:25 +08:00
@shiran3f 好的谢谢,请问下如何准确找到爬虫启动的 chrome 进程呢
lasuar
2020-01-20 11:56:44 +08:00
@wzwwzw 好的谢谢,请问下如何准确找到爬虫启动的 chrome 进程呢
wzwwzw
2020-01-20 12:12:05 +08:00
@lasuar 直接全部杀死呗,可以用 docker 或者用虚拟机运行爬虫,这样子最省事。
lasuar
2020-01-20 12:28:44 +08:00
@wzwwzw ok
andylsr
2020-01-20 12:38:09 +08:00
卡住是怎么个卡法, 我一般会尝试 reflush, 如果确实进程死了那就只能 kill 了, 启动时获取一下系统进程列表, 启动后再获取一下, 一对比就知道启动了哪些 chrome, 如果问题经常会碰到那就先做个测试, 定期重启一下, 或者再写个小脚本做监测?
shiran3f
2020-01-20 12:45:36 +08:00
@lasuar #8 用 @wzwwzw #11 的方法是最省事了,我是记录每次启动后 chrome、seleium、chromedirver,Xvbf 的进程号。因为我是以一次任务启动一次,前后对比来看是否 kill 干净。
soho176
2020-01-20 13:56:47 +08:00
用 firefox,我用 chrome 总出问题,换成了 firefox 好了
guochao
2020-01-22 10:06:53 +08:00
这种进程不退出的问题可以尝试下 linux 的 systemd 或者直接 cgroup,或者 docker。docker 下面就是得把沙箱关掉,麻烦一些。

我们开发环境和生产都是 Fedora/CentOS,开着 SELinux。用的是 puppeteer。遇到的问题是这样,有的时候 chromium 本身父进程会崩溃,或者 blink 的渲染进程 bug 阻塞了通信导致 timeout,最后无法正确关闭。解决办法就是利用 cgroup 记录 pid,顺便限制一下资源占用,退出时一次性把这个 cgroup 下所有 pid 杀死。

chrome 的 devtools 协议的话,还可以尝试一下 node 的 puppeteer 和 golang 的 chromedp,都是直接启动 chrome/chromium 不需要 chromedriver 的
lasuar
2020-01-22 17:42:14 +08:00
@guochao 好的,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX