目录
PyVirtualDisplay 无界面运行Chrome
Chrome浏览器是有界面的,需要在有界面的系统中才能运行。如果像Linux服务器这样的无界面系统,直接使用Chrome浏览器是不行的,需要借助PyVirtualDisplay 才能在无界面系统下运行Chrome浏览器。PyVirtualDisplay 不能在Windows系统正常运行,可以在Linux系统下运行。
selenium + chromedriver 如何实现无界面爬取
在使用selenium爬取12306的过程中,发现使用phantomjs无法爬取,使用chromedriver就可以,应该是phantomjs被网站检测出来后封禁了,使用chromedriver又会显示界面,爬取效率低。
现在有两点疑问,google了好久都没找到有效的解决方法
1.如何伪装phantomjs,尽最大可能的伪装
2.如何设置chromedriver,使其不显示界面,或者还有什么其他方法提高爬取效率
通过PyVirtualDisplay可以实现你的需求,大概代码就是这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/usr/bin/env python """ 注意: 1.要安装:pip install pyvirtualdisplay 2.在Windows系统不能运行,只能在Linux系统下运行 """ # 导入pyvirtualdisplay from pyvirtualdisplay import Display # 导入selenium的驱动 from selenium import webdriver # 设定虚拟显示器 display = Display(visible=0, size=(800, 600)) # 开启虚拟显示器 display.start() # 现在浏览器将会运行在一个虚拟的显示器 # 你将不会看到这个浏览器. # 以下是selenium的正常操作流程 browser = webdriver.Chrome() browser.get('http://www.baidu.com') print browser.title browser.quit() # 退出虚拟显示器 display.stop() |
PyVirtualDisplay 运行报错
PyVirtualDisplay 运行的时候可能会报错:No such file or directory。其实是缺少了xvfb
或者是 xvfbwrapper
这两个东西。使用命令安装就好了:
xvfb:sudo apt-get install xvfb
xvfbwrapper:pip install xvfbwrapper
更详细的可以阅读这里:https://stackoverflow.com/questions/32173839/
Scrapy-Splash scrapy提供的解决方案
splash是scrapy提供的获取网页信息都是js加载出来的,并且会有ajax异步加载的动态网页的一个解决方案。相比于selenium,splash支持分布式,是轻量级的,效率高,但是稳定性比selenium的Chrome差一些。
Scrapy-Splash的GitHub项目地址:https://github.com/scrapy-plugins/scrapy-splash。详细的教程自己寻找。
Selenium Grid
Selenium有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试。支持分布式。教程自己找。
Splinter 网页自动化测试工具
Splinter和selenium一样是网页自动化测试工具,Splinter也能调用浏览器,和selenium相像。
Splinter的GitHub项目地址:https://github.com/cobrateam/splinter
教程自己找。