博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在headless模式下运行selenium
阅读量:6532 次
发布时间:2019-06-24

本文共 1923 字,大约阅读时间需要 6 分钟。

原文地址:

在Python中进行浏览器测试时,一般我们会选择selenium这样的库来简化我们工作量。而有些时候,为了对一些动态数据进行抓取,我们会选择这样的工具。而在selenium中我们也可以集成Phantomjs对应的驱动,可以很方便的进行对应的操作。

在Phantomjs的官方网站上,我们可以看到类似如下的字样:

Phantomjs

在这里就引申出1个headless mode的概念。而phantomjs与我们常用浏览器的区别就是,它不需要GUI界面也可以运行,因此更为节省资源。

实际上,对于动态数据的抓取问题对我来说已经是很多年之前的事情,无论是基于Phantomjs的,还是使用Qt、GTK这样的GUI包编写浏览器来进行操作,或者是这里要介绍的selenium的方式,都已经成为过去式了。
而自从在新公司从事新的工作后,对于这样的问题实际上基本上都懒得动手了,不如让同事去做吧。
大概在1个月前,之前公司坐我隔壁的那个哥们写了1个分布式的爬虫框架(实际上关于这方面,个人觉得完全没有必要,流行的scrapy和pyspider那个好用)时遇到了这样1个问题,当时他在selenium中使用Phantomjs对某个页面进行抓取,然后发现有些东西使用Phantomjs抓取不下来,然后只要使用firefox的方式来进行。其博客可以。
而在不久前,chrome宣布支持,而后firefox跟随的新闻,再次勾起我无尽的回忆。
实际上,phantomjs这个工具对于Python的人来说很不习惯,而且还有一些莫名其妙的问题。那么,我们就来谈谈在Firefox和Chrome浏览器不原生支持headless模式下,如何使用selenium来实现headless模式进行动态数据的抓取。
在这里为了方便说明,我们在Linux环境下进行操作,使用的版本如下:

Centos==6.8Python==2.7.10selenium==2.53.0Firefox==45.0

在Linux中有1个很好用的工具xvfb,它是1个X服务可以用于在没有显示器的硬件和物理输入设备上运行,详细的操作可以。而关于X服务的内容,请自行百度。比较常见的例子在ssh中进行X11转发。

可以看到,在这里我们需要借助xvfb的方式来实现所谓的headless模式,实际上这个操作就10分钟就完成了。

安装必需的软件包

在这里,我们通过如下的方式安装需要的软件包:

[cat@localhost ~]$ sudo yum install xdg-utils xorg-x11-server-Xvfb xorg-x11-xkb-utils

如果你使用的是基于Debian的系统,比如Ubuntu,那么对应的安装方式可能为:

sudo aptitude install xdg-utils xvfb x11-xkb-utils

安装xvfb的绑定

安装完成xvfb绑定后,一般情况下我们会使用命令的方式来开启虚拟显示。而由于本人比较懒是1个特点,因此我们直接将其与我们的脚本一起集成在一起。

在这里,我们安装1个的库,这个库用于在你的Python中开启和关闭xfvb会话。
在这里,我们直接通过pip进行安装:

pip install xvfbwrapper

编写对应的代码

安装完绑定依赖后,我们终于可以愉快的开启编写代码了,在这里我们先引入对应的模块:

from xvfbwrapper import Xvfb

接着我们实例化1个实例:

xvfb = Xvfb()

接着我们就可以开启及关闭其其会话了:

#!/usr/bin/env pythonfrom selenium import webdriverfrom xvfbwrapper import Xvfbxvfb = Xvfb(width=1280,height=720)xvfb.start()print('Start...')browser = webdriver.Firefox()browser.get('http://52sox.com')title = browser.titleprint(title)print("Clean...")browser.close()xvfb.stop()

在这里,我们将其与selenium进行集成,在这里由于时间的关系,就简单的用于获取个人博客上的标题。

下面我们进行测试:

[cat@localhost ~]$ python headless.py Start...The Kite in the windClean...

发现其可以正常的运行。可以说,简单到没有朋友。

简单到没有朋友

参考文章:

转载地址:http://gwhbo.baihongyu.com/

你可能感兴趣的文章
【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】
查看>>
Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
查看>>
I.MX6 Android USB Touch eGTouchA.ini文件存放
查看>>
4-5-创建索引表-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
查看>>
java 操作 RabbitMQ 发送、接受消息
查看>>
go run main.go undefined? golang main包那点事
查看>>
前端进阶(13) - 搭建自己的前端脚手架
查看>>
数据挖掘(二):认识数据
查看>>
从零开始写一个npm包,一键生成react组件(偷懒==提高效率)
查看>>
Golang中的路由
查看>>
【期末考试季】JAVA进阶复习提纲
查看>>
Volley(二)—— 基本Request对象 & RequestQueue&请求取消
查看>>
2017中国系统架构师大会“盛装”来袭
查看>>
Google插件switchysharp的用法
查看>>
中国最强的人工智能学术会议来了
查看>>
Metasploit的射频收发器功能 | Metasploit’s RF Transceiver Capabilities
查看>>
Osmocom-BB中cell_log的多种使用姿势
查看>>
主库 归档 删除策略
查看>>
linux服务器多网卡bond
查看>>
Chrome 更新策略大变:优先安装 64 位版本
查看>>