在headless模式下運行selenium

原文地址:html

http://52sox.com/python-use-h...python

在Python中進行瀏覽器測試時,通常咱們會選擇selenium這樣的庫來簡化咱們工做量。而有些時候,爲了對一些動態數據進行抓取,咱們會選擇PhantomJs這樣的工具。而在selenium中咱們也能夠集成Phantomjs對應的驅動,能夠很方便的進行對應的操做。
在Phantomjs的官方網站上,咱們能夠看到相似以下的字樣:git

Phantomjs

在這裏就引伸出1個headless mode的概念。而phantomjs與咱們經常使用瀏覽器的區別就是,它不須要GUI界面也能夠運行,所以更爲節省資源。
實際上,對於動態數據的抓取問題對我來講已是不少年以前的事情,不管是基於Phantomjs的casperjs,仍是使用Qt、GTK這樣的GUI包編寫瀏覽器來進行操做,或者是這裏要介紹的selenium的方式,都已經成爲過去式了。
而自從在新公司從事新的工做後,對於這樣的問題實際上基本上都懶得動手了,不如讓同事去作吧。
大概在1個月前,以前公司坐我隔壁的那個哥們寫了1個分佈式的爬蟲框架(實際上關於這方面,我的以爲徹底沒有必要,流行的scrapy和pyspider那個好用)時遇到了這樣1個問題,當時他在selenium中使用Phantomjs對某個頁面進行抓取,而後發現有些東西使用Phantomjs抓取不下來,而後只要使用firefox的方式來進行。其博客能夠點擊
而在不久前,chrome宣佈支持headless模式,然後firefox跟隨的新聞,再次勾起我無盡的回憶。
實際上,phantomjs這個工具對於Python的人來講很不習慣,並且還有一些莫名其妙的問題。那麼,咱們就來談談在Firefox和Chrome瀏覽器不原生支持headless模式下,如何使用selenium來實現headless模式進行動態數據的抓取。
在這裏爲了方便說明,咱們在Linux環境下進行操做,使用的版本以下:github

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

在Linux中有1個很好用的工具xvfb,它是1個X服務能夠用於在沒有顯示器的硬件和物理輸入設備上運行,詳細的操做能夠參考。而關於X服務的內容,請自行百度。比較常見的例子在ssh中進行X11轉發。
能夠看到,在這裏咱們須要藉助xvfb的方式來實現所謂的headless模式,實際上這個操做就10分鐘就完成了。web

安裝必需的軟件包

在這裏,咱們經過以下的方式安裝須要的軟件包:chrome

[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個xvfbwrapper的庫,這個庫用於在你的Python中開啓和關閉xfvb會話。
在這裏,咱們直接經過pip進行安裝:app

pip install xvfbwrapper

編寫對應的代碼

安裝完綁定依賴後,咱們終於能夠愉快的開啓編寫代碼了,在這裏咱們先引入對應的模塊:框架

from xvfbwrapper import Xvfb

接着咱們實例化1個實例:less

xvfb = Xvfb()

接着咱們就能夠開啓及關閉其其會話了:

#!/usr/bin/env python

from selenium import webdriver
from xvfbwrapper import Xvfb

xvfb = Xvfb(width=1280,height=720)
xvfb.start()
print('Start...')
browser = webdriver.Firefox()
browser.get('http://52sox.com')
title = browser.title
print(title)
print("Clean...")
browser.close()
xvfb.stop()

在這裏,咱們將其與selenium進行集成,在這裏因爲時間的關係,就簡單的用於獲取我的博客上的標題。
下面咱們進行測試:

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

發現其能夠正常的運行。能夠說,簡單到沒有朋友。

簡單到沒有朋友

參考文章:

http://tobyho.com/2015/01/09/...

相關文章
相關標籤/搜索