首页 > 在CentOS 7.7 x86_64上安装python3的selenium 3模块实录

在CentOS 7.7 x86_64上安装python3的selenium 3模块实录

安装selenium3模块

pip3 install selenium

如果上面的命令因为网络问题,重试多次仍失败,可以尝试下面的命令

pip3 install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

配置selenium相关的环境

下载并安装最新的Chrome版本

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

yum -y install google-chrome-stable_current_x86_64.rpm

检查安装的Chrome版本

which google-chrome-stable

/bin/google-chrome-stable

使用下面的命令得到Chrome的版本号

google-chrome-stable -version

Google Chrome 81.0.4044.113

使用下面的命令查看帮助

/bin/google-chrome-stable --help

下面对应的ChromeDriver版本,从下面的地址

https://sites.google.com/a/chromium.org/chromedriver/downloads

下载

wget https://chromedriver.storage.googleapis.com/81.0.4044.69/chromedriver_linux64.zip

unzip chromedriver_linux64.zip

cp -f chromedriver /usr/bin/

chmod 755 chromedriver

确保chrome和chromedriver版本一致,并且chromedriver的安装位置,需要在python代码中使用

运行测试demo

python3 selenium_demo.py

#!/usr/bin/env python3
#encoding: utf-8
#description: 测试程序控制并驱动Chrome 81
#note:需要安装selenium3,chromedriver和Chrome版本兼容
#date: 2020-04-21from selenium import webdriverif __name__ == '__main__':options = webdriver.ChromeOptions()options.add_argument('--headless')options.add_argument('--disable-gpu')options.add_argument('--no-sandbox')url = 'https://www.baidu.com'browser = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=options)browser.get(url)print(browser.page_source)browser.quit()

这个python脚本,使用selenium去远程获取指定url的网页源码并打印出来。

关于selenium模块中webdriver各API的使用方法,参见下面的链接

https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

遇到的问题

1.chromedriver下载速度非常慢

解决方法: 测试发现,需要翻墙才能下载速度快,可以从我的ThinkPad T420的Chrome上翻Q下载该文件,再从虚拟机上下载ThinkPad T420的文件。

2.centos7中Chrome通过selenium截图汉字显示为方框

解决方法:在执行截图任务的虚拟机上安装中文字体,比如这里我选择的是最爱的文泉驿微米黑字体,执行下面的命令

wget http://rpmfind.net/linux/centos/7.7.1908/os/x86_64/Packages/wqy-microhei-fonts-0.2.0-0.12.beta.el7.noarch.rpm

rpm -ivh wqy-microhei-fonts-0.2.0-0.12.beta.el7.noarch.rpm

安装完成之后,直接可以看到字体已经安装成功了。

fc-list :lang=zh

然后打开中文网页就不会乱码了。

3.采用selenium自带截图工具截取的Grafana看板的图片截取不完全

解决方法:经过网上调研和测试发现,能否成功截取全屏,与网页代码的使用有一定关系。试过各种招儿之后,都未能圆满解决,最后我实在没撤了,硬着头皮研究了Grafana页面的代码,发现里面有个唯一的div具有清晰的width和height,直接获取它的值就能大致确定整个截图的大小,从而巧妙解决了这个问题。

找到这个唯一关键的div,并且有尺寸大小,发现只有这个元素的height是真实的

经过测试,发现下面的方法是可行的, 但是有时候执行不稳定

ele = browser.find_element_by_class_name("react-grid-layout.layout")

print(ele.size)

对于普通的网页,使用常规思路就可以了。具体问题具体分析吧。下面以豆瓣首页截取全屏为例,给出一个具有普遍意义的代码selenium_douban.py实现如下:

#!/usr/bin/env python3
#encoding: utf-8
#description: 实现selenium+chromedriver+python实现豆瓣的全文截取,实测有效
#date: 2020-04-22from selenium import webdriver
import timeoptions = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--dns-prefetch-disable')
options.add_argument('--no-referrers')
options.add_argument('--disable-gpu')
options.add_argument('--disable-audio')
options.add_argument('--no-sandbox')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--allow-insecure-localhost')driver = webdriver.Chrome(options=options)
driver.get('http://www.douban.com')
width = driver.execute_script("return Math.max(document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);")
height = driver.execute_script("return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);")
print(width, height)
driver.set_window_size(width + 100, height + 100)
time.sleep(5)
driver.save_screenshot('douban.png')
driver.close()

得到的效果图如下:

 

 

更多相关:

  • selenium中文版文档 http://www.selenium.org.cn/1203.html   selenium 搜索功能: http://blog.csdn.net/qq_878799579/article/details/73321015   selenium 详细教程: http://www.cnblogs.com/y...