每次看到selenium都觉得很牛,但是苦于文档(包括英文)太少,我到今天才真正完整地安装使用了一把。我不喜欢来一个项目就在自己电脑上搭一个运行环境,而是喜欢在docker或者虚拟机里进行操作,问题是docker或者虚拟机里并没有任何的可视化的浏览器,而Selenium又依赖于这些浏览器驱动,我是最讨厌安装驱动的,因为驱动这个东西电脑不同差距特别大,总是会出现各种问题。而在服务器上如何安装selenium或者splinter,这个过程在网上基本是找不到的,所以这里记录下自己的安装方法。
注:这里之所以要使用splinter
,而不只使用selenium
是因为splinter
在selenium
之上又封装了一层,使得接口更为简单。
Linux install Splinter(Selenium)
首先,需要安装必要的python包pip3 install splinter selenium xvfbwrapper
需要注意的是,splinter只有在使用浏览器的时候才需要安装selenium,如果仅仅是在flask或者django中进行测试是不需要的。
安装chromedriver
ChromeDriver首页-WebDriver for Chrome,下载对应操作系统的最新的chromedriver
|
|
Docker版本Selenium
https://github.com/SeleniumHQ/docker-selenium
handless browser
https://zhuanlan.zhihu.com/p/26810049?utm_medium=social&utm_source=qq
Linux Server(Raspberry Pi)安装浏览器
上面的方式是直接打开浏览器的方式,但是在Server上面没有界面,也就没有浏览器,这种情况就得安装单独的真对server的浏览器了。最先我想使用ChromeDriver,但是无论怎么折腾也安装不上,于是就用了Firefox,发现一篇很好的教程。它这个版本被称作Selenium headless firefox
。安装步骤如下:
|
|
开始Splinter(Selenium)
无桌面环境
|
|
桌面环境
如果直接在本地有桌面环境的情况下进行测试那么,直接这样子:
|
|
Options选项
通过chrome_options.add_argument('')
可以设置非常多的浏览器的参数
|
|
获取所有网络请求
很多时候访问一个页面,在该页面可能会同时访问其他的资源,例如js,css,甚至其他一些关键信息。这时候就要求我们能够获取中间的所有的请求,但是selenium
是不带这个功能的,只能使用一些代理,例如:browsermob-proxy。其不需要安装,只需要下载bin
包,然后在使用的时候指定路径即可。例如:
|
|
浏览器操作
|
|
页面操作
|
|
数据获取
|
|
TroubleShooting
Chrome driver crashes when opens a new tab
原因可能是服务器内存太低了,需要加大虚拟内存
selenium.common.exceptions.WebDriverException: Message: session not created exception,将webdriver更新到最新版基本上能解决问题
相关文章
Getting Started with Headless Chrome
Setting up a Digital Ocean server for Selenium, Chrome, and Python