linux centos7 关于Python模拟浏览器踩坑(转载)
https://cloud.tencent.com/developer/article/1404558
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
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() # 这个一定要加。加了就没上面的问题了。
linux centos7 关于Python模拟浏览器踩坑(转载)相关推荐
- (Python+Tensorflow)编程踩坑集锦
(Python+Tensorflow)编程踩坑集锦 1 开发环境安装 推荐视频:https://www.icourse163.org/learn/PKU-1002536002?tid=14529374 ...
- python模拟浏览器代码_python 模拟浏览器
想用python模拟浏览器访问web的方法测试些东西,有哪几种方法呢? 一类:单纯的访问web,不解析其js,css等. 1. urllib2 #-*- coding:utf-8 -* import ...
- python 模拟键盘 linux,在Linux中使用Python模拟键盘按键,linuxpython
在Linux中使用Python模拟键盘按键,linuxpython 之前在做自动化测试中需要用Python在linux中模拟Ctrl+V 进行路径粘贴,试了很多种方法,起初用了xerox和pyperc ...
- python 模拟浏览器播放视频_使用python模拟浏览器实现登陆
前言你有没有想过,当我们在某个网站上登陆时,网站是如何通过验证的,我们都提交给了网站哪些信息,浏览器都发起了哪些请求? 下图是某个网站的登陆界面,接下来就让我们通过命令行模拟浏览器实现登陆操作,看看一 ...
- Python 模拟浏览器 POST请求思路
Python 模拟浏览器发送POST请求思路 昨天朋友找我说想对一个tp网站的视频刷播放量,说可以一个IP地址无限刷. 登陆到网站后对所需的视频进行点击播放,发现没有任何跳转,而是发送了个POST请求 ...
- python模拟浏览器上传文件_Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)...
http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的. multipart/form-data的基础方法是post,也就是说是由post方法来组合实 ...
- python 模拟浏览器selenium 微信_Spider-Python爬虫之使用Selenium模拟浏览器行为
分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...
- python 模拟浏览器selenium_使用Selenium模拟浏览器,实现自动爬取数据
最近需要在一个网站下载一批数据.但是输入一个查询,返回三四万条结果,每次只能导出500条,而且每次还得输入下载条目的范围!这样点击下载,还不要了我的老命.于是乎想自动化这个过程. 我的需求主要是两点: ...
- python模拟浏览器下载文件_python第一个脚本,模拟浏览器下载文件 | 学步园
用wget命令下载文件总是失败.用python脚本模拟浏览器下载,代码如下: #!/usr/bin/python import sys from urllib import FancyURLopene ...
- python 模拟浏览器selenium_从零开始写Python爬虫 --- 3.1 Selenium模拟浏览器
本来说好要写Mechanize模拟浏览器的,结果一看居然只支持2.x版本的Python,而且已经长久没有更新维护了,本着学新不学旧的原则,我决定跳过他,直接开学Selenium(其实就是我懒,逃 Se ...
最新文章
- 第八章 软件项目质量计划
- apache ant
- Oracle NVL()和NVL2()函数
- mySql完全手册2011022301
- “物联网+云平台”的实验室管理方案,瞄准的是生物医药和化工行业
- 计算数字的位数并逆序输出
- python - unitest
- java去掉mongodb日志_JAVA开发 Mongodb3.0以上 去掉控制台DEBUG信息
- 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?
- bootstraptable 加载完成回调函数_牛皮了!头一次见有大佬把「JavaScript中的回调函数」详解得如此清晰明了...
- Kubernetes详解(十九)——Kubernetes Pod控制器
- php简单授权验证,技术教程:PHP简单免网络的授权验证方法
- “校内网”将不存在,“校内网”更名为“人人网”
- 什么是物联网技术
- Character与char的区别
- win2003系统的序列号
- COPC酞菁钴,cAS号:3317-67-7磺化酞菁钴 催化剂 深蓝色粉末 磺化酞菁钴
- 更改windows7下DOS界面属性的方法
- zeppelin整合hive
- J1939-21数据链路层多帧协议PDU解析
热门文章
- sql server 2008 r2 “远程过程调用失败“解决方案
- 学会原谅自己,我们会更加强大
- Excel - 字符串处理函数:LEFT, RIGHT, MID, LEN 和 FIND
- 用matplotlib可视化加州房价价格(散点图各个参数的含义)
- 面试官:如何设计群聊消息的已读未读功能?
- 电脑扬声器没有声音,插上耳机也检测不到
- TDengine 入坑
- Java打造RPC框架(二):11个类实现简单Java RPC
- eggs和egg是什么意思_egg是什么意思_egg的翻译_音标_读音_用法_例句_爱词霸在线词典...
- material-table的使用