1. 程式人生 > >python+selenium呼叫瀏覽器(IE-Chrome-Firefox)實現爬蟲功能

python+selenium呼叫瀏覽器(IE-Chrome-Firefox)實現爬蟲功能

    好記性不如爛筆頭,今天把selenium呼叫瀏覽器操作總結一下。

    首先,得先明確,為什麼要採用selenium來模擬登陸網頁。最主要的原因我認為還是在於通過這種模擬登入方式獲取的頁面html程式碼,可以把js裡的內容也獲取到,而通過urllib方式模擬登入的方式雖然也可以偽裝成瀏覽器的形式獲取頁面html程式碼,但是這裡面的js,css程式碼是沒有的,也就是沒有動態的內容,達不到全面抓取資料的目的;當然除了selenium這種方式外,還有其他的途徑也能獲取到js等動態程式碼,這裡先不做介紹了,以後再分別細說。

    說了selenium的優點,就需要再強調一下它的不足,selenium呼叫瀏覽器時,跟我們手動開啟瀏覽器效果一樣,你可以想想自己開啟瀏覽器時的映象,從開啟到載入完畢,要耗費好幾秒時間,對於一般的指令碼來說,好幾秒可是很長的時間了,但是它就是這麼傲嬌,載入不完就別想玩後面的;如果你只是想偶爾開啟一次抓一次,幾秒倒也沒什麼,但如果你要迴圈執行的話,這個方法的效率就是低的不要不要的了。

    總之,還是要開發人員自己權衡利弊,決定是否使用。

    好了,接下來我們就來介紹python環境下,如何利用selenium體統的webdriver來瀏覽三大常用瀏覽器:IE,Chrome,Firefox。

    1 利用Chrome瀏覽器,安裝的chrome瀏覽器是沒有沒有提供現成的driver的,因此需要我們自己下載ChromeDriver.exe,這裡可以有下載地址,下載完後把它放到chrome瀏覽器所在的安裝目錄下就可以了,保證讓他跟chrome.exe呆一起就可以了。相關指令碼如下

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
chromedriver = "D:\Program Files\ChromeGAE\Chrome\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(chromedriver)
url = "http://www.baidu.com"
browser.get(url)


這樣基本就可以直接用了。

    2 利用IE瀏覽器,IE瀏覽器和chrome比較相似,也需要我們自己去找到Driver,名字是IEDriverServer.exe,這個隨便一百度也能找到,就不放連線了,下載後跟chrome那裡一樣,也是放到ieexplore.exe的同級目錄下,這個一般是在C:\Program Files\Internet Explorer下,畢竟是系統自帶的嘛。指令碼如下

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import oschromedriver = "C:\Program Files\Internet Explorer\IEDriverServer.exe"
os.environ["webdriver.ie.driver"] = IEdriver
browser = webdriver.Ie(IEdriver)
url = "http://www.baidu.com"
browser.get(url)

    3 利用Firefox瀏覽器,firefox這個相比起前面兩個就方便多了,果然是親開發的良心瀏覽器,自帶driver光環,拿來就可以用。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
<pre name="code" class="html">browser = webdriver.Firefox()
<pre name="code" class="html">url = "http://www.baidu.com"
<pre name="code" class="html">browser.get(url)
是不是方便多了,但是!但是!但是!這裡不得不說的是,firefox也是有大坑的,firefox會經常更新,一單更新了,你的selenium沒跟到位,那就費了,銀次你需要關閉firefox的自動更新,並且將firefox保持在一個較低的版本(45以前的應該還是可以的),我當初遇到的問題就是firefox更新後,指令碼可以呼叫瀏覽器開啟,但是卻打不開url,各種找原因,看到其他網友就說是版本太高的原因,方法就是再找到老版本的firefox安裝。

    好了,就說這些了,如有不對之處還望多批評指正。