专栏首页技术的专栏linux 安装 chromedriver,selenium 踩坑总结
原创

linux 安装 chromedriver,selenium 踩坑总结

1、腾讯云服务器

2、Linux VM_0_10_centos 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

待运行python脚本:

from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument('headless')
browser = webdriver.Chrome(chrome_options=option)

browser.get('http://www.baidu.com/')
print(browser.title)
exit();

安装详细过程:

cd /usr/local/share
wget -N http://chromedriver.storage.googleapis.com/2.26/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
chmod +x chromedriver
ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

yum install python-pip

pip install selenium

执行,python脚本,报错:

[root@VM_0_10_centos pythonproj]# python webdriver.py 
Traceback (most recent call last):
  File "webdriver.py", line 3, in <module>
    browser = webdriver.Chrome()
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 98, in start
    self.assert_process_still_running()
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 111, in assert_process_still_running
    % (self.path, return_code)
selenium.common.exceptions.WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127

手动查看 chromedriver 版本

[root@VM_0_10_centos pythonproj]# chromedriver --version
chromedriver: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory

安装chrome浏览器:

yum install chromium

执行,还是报错:

[root@VM_0_10_centos ~]# chromedriver
chromedriver: error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory

搜索,发现这个so文件问题,是少了这个库GConf2,http://landcareweb.com/questions/25967/que-shao-gong-xiang-ku-libgconf-2-so-4

安装这个库:

yum install GConf2

再执行 webdriver,搞定!

[root@VM_0_10_centos ~]# chromedriver
Starting ChromeDriver 2.26.436382 (70eb799287ce4c2208441fc057053a5b07ceabac) on port 9515
Only local connections are allowed.

再执行pathon脚本,报错:

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (Driver info: chromedriver=2.26.436382 (70eb799287ce4c2208441fc057053a5b07ceabac),platform=Linux 3.10.0-514.26.2.el7.x86_64 x86_64)

查看版本问题:

[root@VM_0_10_centos pythonproj]# yum list installed | grep chro
    chromium.x86_64                     71.0.3578.98-2.el7             @epel
[root@VM_0_10_centos pythonproj]# chromedriver --version
    ChromeDriver 2.26.436382 (70eb799287ce4c2208441fc057053a5b07ceabac)

好像是版本不一致的问题,看这个:https://www.jianshu.com/p/40027de48c5b

ChromeDriver的版本太低了,跟安装的浏览器版本搭不上。

重新安装下 ChromeDriver版本 :v2.45

cd /usr/local/share
wget -N http://chromedriver.storage.googleapis.com/2.45/chromedriver_linux64.zip
unzip chromedriver_linux64.zip

再执行脚本,依旧报错:

selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/chromium-browser is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),platform=Linux 3.10.0-514.26.2.el7.x86_64 x86_64)

不过,这次错误明显好很多。

搜一下,找到解决办法:https://github.com/heroku/heroku-buildpack-google-chrome/issues/46

Don't think it's has a heroku issue. Had a similar issue with docker container as well. Here is my fix that worked in docker -

`
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options)

修改python脚本如下:

from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument('headless')
option.add_argument('no-sandbox')
option.add_argument('disable-dev-shm-usage')
browser = webdriver.Chrome('/usr/local/bin/chromedriver',chrome_options=option)

browser.get('http://www.baidu.com/')
print(browser.title)
exit();

再执行,成功!

运行一段时候后,又报错:

selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
  (Driver info: chromedriver=2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),platform=Linux 3.10.0-514.26.2.el7.x86_64 x86_64)

查看进程:

[root@VM_0_10_centos ~]# 
[root@VM_0_10_centos ~]# 
[root@VM_0_10_centos ~]# ps -ef | grep chrome
root      2947     1  0 12:51 ?        00:00:00 /usr/local/bin/chromedriver --port=40245
root      3615     1  0 12:55 ?        00:00:00 /usr/local/bin/chromedriver --port=45273
root      5809     1  0 13:10 pts/0    00:00:01 /usr/local/bin/chromedriver --port=44337
root      8637  5268  0 13:30 pts/0    00:00:00 grep --color=auto chrome
root     21378     1  0 11:11 ?        00:00:01 /usr/local/bin/chromedriver --port=47677
root     25024     1  0 Mar18 ?        00:00:00 /usr/local/bin/chromedriver --port=38096
root     25346     1  0 Mar18 ?        00:00:00 /usr/local/bin/chromedriver --port=42048
[root@VM_0_10_centos ~]# 
[root@VM_0_10_centos ~]# 
[root@VM_0_10_centos ~]# killall chromedriver
[root@VM_0_10_centos ~]# ps -ef | grep chrome
root      8674  5268  0 13:31 pts/0    00:00:00 grep --color=auto chrome

不知道是不是这影响,,,代码里面没有browser.quit(),如上,kill chromedriver 掉再试试。

还是报错,继续查,

[root@VM_0_10_centos ~]# ps -ef | grep driver
root      2956     1  0 12:51 ?        00:00:02 /usr/bin/chromium-browser --enable-plugins --enable-extensions --enable-user-scripts --enable-printing --enable-gpu-rasterization --enable-sync --auto-ssl-client-auth --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --force-fieldtrials=SiteIsolationExtensions/Control --headless --ignore-certificate-errors --load-extension=/tmp/.org.chromium.Chromium.dteWvh/internal --log-level=0 --metrics-recording-only --no-first-run --no-sandbox --password-store=basic --remote-debugging-port=0 --test-type=webdriver --use-mock-keychain --user-data-dir=/tmp/.org.chromium.Chromium.tOyVfN data:,
......  一大堆这个进程
[root@VM_0_10_centos ~]# killall chromium-browser

再重试,好了。

[root@VM_0_10_centos ~]# killall chromedriver
[root@VM_0_10_centos ~]# killall chromium-browser
[root@VM_0_10_centos ~]# 
[root@VM_0_10_centos ~]# 
[root@VM_0_10_centos ~]# ps -ef | grep chro
root     13735 13285  0 14:08 pts/0    00:00:00 grep --color=auto chro

脚本退出时,一定要主动调用 driver.quit !!!

修改脚本:

from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument('headless')
option.add_argument('no-sandbox')
option.add_argument('disable-dev-shm-usage')
browser = webdriver.Chrome('/usr/local/bin/chromedriver',chrome_options=option)

browser.get('http://www.baidu.com/')
print(browser.title)
browser.quit()            # 这个一定要加。加了就没上面的问题了。

附带一个应用例子源码:用Python写一个微信提醒备忘录,https://github.com/azhaochen/doc

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux 下selenium chrome使用详解

    到此这篇关于linux 下selenium chrome使用详解的文章就介绍到这了,更多相关linux selenium chrome内容请搜索ZaLou.Cn...

    砸漏
  • 手把手教你搭建 Selenuim 自动化环境

    看完这篇文章,你将学到如何在 Windows 上搭建 Python + Selenium 自动化环境。

    sylan215
  • [Selenium+Chrome使用总结]加载Flash、禁用JS脚本、滚动页面至元素、缩放页面

    前几周做了个使用Selenium的项目,踩了好多好多好多的Selenium的坑,越来越感觉他作为一个第三方库,对于Chrome的操作实在是有局限。另外,推荐大家...

    Rude3Knife的公众号
  • Selenium2+python自动化61-Chrome浏览器(chromedriver)

    前言 selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrome浏览器版本号,对应的驱动文件版本号又不一样,如果版本号不匹配,是没法启动...

    上海-悠悠
  • [Selenium+Chrome使用总结]加载Flash/禁用JS脚本/滚动页面至元素/缩放页面

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    蛮三刀酱
  • python使用selenium+chromedriver调用chrome截图

    IT架构圈
  • selenium保存静态网页

    用到的工具有chromedriver,pywin32和selenium。chromedriver安装配置过程自行百度,需要注意的是chromedriver和ch...

    周小董
  • selenium+python自动化100-linux搭建selenium环境

    前言 selenium在windows机器上运行,每次会启动界面,运行很不稳定。于是想到用chrome来了的headless无界面模式,确实方便了不少。

    上海-悠悠
  • centos7无GUI运行selenium chromedriver 亲测可用!

    yum update , 然后yum install google-chrome-stable

    用户1214487
  • Scrapy+Chromium+代理+

    js是爬虫中毕竟麻烦处理的一块。通常的解决办法是通过抓包,然后查看request信息,接着捕获ajax返回的消息。 但是,如果遇到一些js渲染特别复杂的情况,这...

    py3study
  • selenium自动化测试-1.selenium介绍及环境安装

    selenium是web应用程序自动化工具,通过自动操作浏览器,进行点击、输入、回车、返回等来模拟用户的真实行为。如何理解和看待selenium项目,selen...

    王大力测试进阶之路
  • Selenium在Windows7上的系统搭建

    Selenium自动化浏览器。就是这样!你用那种方式做什么完全取决于你自己。首先,它是为了测试目的自动化web应用程序,但肯定不限于此。无聊的基于web的管理任...

    飞狗
  • Selenium Chrome驱动安装(linux系统)

    一般Selenium是在windows系统跑的,但是由于性能问题,需要在linux服务器中运行,效率更高。

    py3study
  • Python爬虫之数据提取-selenium的介绍

    海仔
  • centos7无GUI情况安装Xvfb、selenium、chrome

    最近需要用到selenium浏览器抓取,在windows下对照chrome浏览器开发的代码,在linux服务器上换成phantomjs驱动后,却不能运行了,通过...

    拓荒者
  • 《selenium2 python 自动化测试实战》(4)——鼠标事件

    用户2149234
  • 安装Chrome(Headless)并在python中使用

    Chrome(Headless)即为Chrome的Headless模式,又称为无头浏览器

    wo.
  • 如何用Python开发QQ机器人

    接着,安装 python 操作 mirai-api-http 接口的模块:graia-application-mirai

    Python编程与实战
  • 应对双11,我帮她写了一个自动下单脚本

    本文主要介绍一种定时自动下单的技术实现。脚本为女神而写,希望双十一能帮到她享受更高的优惠,进而看到她的笑容。

    后端技术探索

扫码关注云+社区

领取腾讯云代金券