用了 selenium 有好久了,卡住之后,连程序都停滞了,就像时间停止了一样,没有任何日志。。
这个问题一直没当回事,每次都是起多个浏览器,某个卡住了还有别的在工作,过了许久它又恢复了,查了下说是 chrome 的原因,使用别的浏览器说没有这个问题(未尝试),想来咨询下各位 zs 爬友~,现实中要找到 zs 爬友太难了,v 站真是个好地方~~感谢感谢
1
lasuar OP 别的浏览器如 firefox、phantomjs
|
2
lasuar OP 比如等待某个元素最多 30s,卡住的表现就是它能等一天
|
3
SjwNo1 2020-01-20 09:25:34 +08:00
那就先尝试一下别的浏览器
|
4
shiran3f 2020-01-20 09:25:35 +08:00
我的处理方式很暴力,定时 kill 所有相关进程...你会发现 chrome 开了一堆进程。
|
5
wzwwzw 2020-01-20 09:55:31 +08:00
@shiran3f +1 我也是这样子处理的,每个任务周期结束之后杀掉所有 chrome 的进程,还有 chromedrvier 的进程,如果不涉及到复杂操作可以用 splash。
|
6
sxd96 2020-01-20 09:57:17 +08:00 via iPhone
selenium 不是专门做爬虫的,长时间跑确实会有问题。只能定时 kill 重启。
另外,可以试试 puppeteer |
13
andylsr 2020-01-20 12:38:09 +08:00
卡住是怎么个卡法, 我一般会尝试 reflush, 如果确实进程死了那就只能 kill 了, 启动时获取一下系统进程列表, 启动后再获取一下, 一对比就知道启动了哪些 chrome, 如果问题经常会碰到那就先做个测试, 定期重启一下, 或者再写个小脚本做监测?
|
14
shiran3f 2020-01-20 12:45:36 +08:00
|
15
soho176 2020-01-20 13:56:47 +08:00
用 firefox,我用 chrome 总出问题,换成了 firefox 好了
|
16
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 的 |