Selenium本來是一個用于自動化測試的框架,但是因為它能夠完全模擬瀏覽器的行為,因此在爬蟲中也可以發(fā)揮很大的作用,對于一些有很嚴格的反爬措施的網(wǎng)站,比如,驗證碼,請求中帶有加密字段,或者動態(tài)加載請求,這些情況下都可以將Selenium作為爬蟲的選擇,會省去很多折騰的時間,當然缺點是每次運行的效率會比較低,所以看個人的取舍吧
下面總結(jié)一下在Python爬蟲中經(jīng)常用到的Selenium的一些功能,需要先安裝selenium庫,同時,還需要下載chromedriver,并添加環(huán)境變量
基本的網(wǎng)頁抓取
首先是初始化:
from selenium import webdriver
driver=webdriver.Chrome()
接下來,要訪問某個網(wǎng)頁,并獲得其中的內(nèi)容,使用:
driver.get(url)
a = driver.page_source
就獲得了頁面的內(nèi)容,這時可以使用BeautifulSoup來解析頁面,也可以使用正則表達式
對網(wǎng)頁進行簡單操作
我們還可以通過Selenium在網(wǎng)頁中進行輸入、按鍵等操作,比如當我們想要實現(xiàn)登錄或者查詢的時候:
from selenium.webdriver.common.keys import Keys
a=driver.find_element_by_xpath('')
b=driver.find_element_by_id("")
通過以上的語句,你可以定位a或者b到頁面中的輸入框、單選框、或者確認按鈕(登錄按鈕,搜索按鈕...),接下來,要按下按鈕或者輸入文本或者按下鍵盤上的某個快捷組合鍵,使用下面的語句:
b.send_keys("text")
a.send_keys(Keys.ENTER)
a.send_keys(Keys.CONTROL+'a')
自定義瀏覽器
初始化瀏覽器時是用的默認配置,我們還可以在此基礎上進行更多的配置,比如自定義請求頭,添加代理等。比如自定義請求頭:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('User-Agent="Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"') # 設置User-Agent
chrome_options.add_argument('--proxy-server=http://52.42.234.31:80') #設置代理
chrome_options.add_argument('Host="www.itdecent.cn"') #設置其他請求頭內(nèi)容
還可以設置chrome為無頭瀏覽器,這樣運行的時候就不會彈出chrome的界面:
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('log-level=3') #設置運行時顯示在命令行中的信息級別,這樣顯示的信息較少
設置完成后,在初始化時,使用:
driver = webdriver.Chrome(chrome_options=chrome_options)
來完成設置
在同一個瀏覽器中多開窗口
如果我們運行一個程序需要訪問很多個頁面,那么初始化多個chrome也許不是最好的選擇,初始化一次,在同一個瀏覽器中多開窗口可以提升一定的效率,為了實現(xiàn)這個功能,需要用到簡單的JavaScript:
js=window.open(url);
driver.execute_script(js)
handles=op.window_handles
driver.switch_to_window(handles[1])
其中handles是用來控制當前窗口的,并且通過switch_to_window,可以在不同的窗口之間切換,由于selenium加載網(wǎng)頁一般都較慢,所以可以在處理某個頁面之前提前將下一個頁面打開,這樣可以讓瀏覽器一邊加載然后程序一邊往下運行,節(jié)約了一定的加載時間