欢迎光临散文网 会员登陆 & 注册

【python】selenium模拟浏览器

2021-12-28 22:42 作者:阿提艾斯  | 我要投稿

1、模块介绍

selenium最初是一个自动化测试工具,不过爬虫也经常使用该模块,主要是为了解决requests库无法直接获取js代码渲染的数据的问题。

selenium本质是通过驱动浏览器,完全模拟浏览器的动作,可以支持多种浏览器。

使用selenium获取到的页面是所见即所得的,就是说不止后台返回的数据能获取到,通过js渲染的数据也会获取到。

selenium的性能怎么样呢?亲自测试,访问一个链接40次(进程池=6),快的时候需要30秒左右,慢的时候需要180秒左右。

2、模块安装

这儿给出了linux arm, linux x86_64, windows环境安装步骤,按自己情况进行安装。

2.1 Linux  armv7l安装

我使用的树莓派测试的sulenium模块

树莓派类型
pip3 install selenium==3.141.0
安装selenium

2.1.2 chromium浏览器安装

sudo apt-get install chromium-browser    # 这样安装是最新的浏览器

2.1.3 chromium-chromedriver驱动安装

sudo apt-get install chromium-chromedriver    # 这样安装是最新的驱动

一般浏览器和驱动安装最新的版本都会对应上,如下图都是92版本:

浏览器版本和驱动版本要保持一致

浏览器和浏览器驱动版本一定要配套。比如,如果你用92版本的驱动去启动86版本的浏览器,直接就会报错。如下图所示:

版本不配套后面运行selenium会报错


2.2 Linux x86_64安装

2.2.1 chrome browser下载安装

树莓派系统架构是基于arm的,而现在很多软件都是基于x86_64的或者windows的,如果你的机器架构是x86_64或者windows的,网上很容易找找到安装chrome+chromedriver的教程。

安装最新稳定版本的chrome浏览器:

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

或者

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

如果想安装chrome历史版本,从下方链接里找:

https://www.chromedownloads.net/chrome64linux-stable/

安装好之后查看chrome browser版本

chrome --version

2.2.2 chromedriver驱动下载安装

下载后解压会得到chromedirver二进制文件,并添加a+x执行权限,拷贝到/usr/local/bin或者/usr/bin目录下

# 这儿注意下载驱动版本,要和上面的浏览器版本保持一致
wget https://npm.taobao.org/mirrors/chromedriver/97.0.4692.36/chromedriver_linux64.zip
# 将zip解压到当前目录chromedriver_linux64下
unzip -d ./chromedriver_linux64 chromedriver_linux64.zip
chmod a+x ./chromedriver_linux64/chromedriver
# 如果机器上本来就有驱动,备份下
if [ -f "/usr/local/bin/chromedriver" ]; then
    mv /usr/local/bin/chromedriver /usr/local/bin/chromedriver_old
fi
cp ./chromedriver_linux64/chromedriver /usr/local/bin

这儿附上两个找不同版本驱动的链接

官方下载链接:chromedriver.storage.googleapis.com/index.html

taobao下载链接: http://npm.taobao.org/mirrors/chromedriver


2.3 windows安装

2.3.1 chrome browser下载安装

https://www.chromedownloads.net/chrome64win/

2.3.2 chromdriver驱动下载安装

http://npm.taobao.org/mirrors/chromedriver

注意驱动下载之后,要放到python安装包的目录下

把驱动文件放在python安装目录下

3、模块使用

举一个例子:

from selenium import webdriver


if __name__ == "__main__":
    options = webdriver.ChromeOptions()    # 实例化浏览器选项
    options.add_argument('--headless')       # 添加无头模式
    options.add_argument('ignore-certificate-errors')    # 解决“您的链接不是私密链接”错误
    driver = webdriver.Chrome(executable_path='/usr/lib/chromium-browser/chromedriver', options=options)    # 启动chrome浏览器,executable_path指定的是驱动路径
    driver.get("http://www.baidu.com")    # 访问百度首页
    print(driver.page_source)    # 获取访问页面的内容
    driver.close()    # 关闭浏览器

无头模式:就是你不用可视化浏览器就可以访问url,不需要前台展示。没有头嘛~


4、遇到的问题

4.1 最常见的就是浏览器和驱动版本不一致导致报错,所以发生错误的时候首先检查自己下载的浏览器和驱动版本。

4.2 在创建浏览器的时候,即webdriver.Chrome()这一步卡住了,不输出任何东西,也不报错退出。

解决办法:在/etc/hosts中添加一行:  127.0.0.1 localhost。 

4.3 报错:Message: Reached error page:about:neterror?e=proxyConnectFailure……

问题原因:你访问的链接,浏览器打不开。

解决办法:检查你的网络是不是确实打不开该网址。



以上知识如果理解有错误,欢迎指出,共同学习。

【python】selenium模拟浏览器的评论 (共 条)

分享到微博请遵守国家法律