有時(shí)web頁面太復(fù)雜波材,無法找到API請(qǐng)求股淡。這是我們就可以使用selenium
了。(selenium
類似于phantomjs無頭瀏覽器一樣廷区,是一個(gè)自動(dòng)化的瀏覽器唯灵,可用于自動(dòng)化測(cè)試和爬蟲開發(fā))
Selenium-python模塊
1.selenium介紹
注意:appnium的核心就用到了selenium的使用。
selenium通過瀏覽器驅(qū)動(dòng)驅(qū)動(dòng)瀏覽器隙轻,就好像一個(gè)真正的用戶在操作一樣埠帕,支持大部分的主流瀏覽器,包括IE玖绿,F(xiàn)irefox敛瓷,Safari,Chrome斑匪,Opera等呐籽。我們可以利用它來模擬用戶訪問頁面,點(diǎn)擊按鈕等蚀瘸,可以繞過一些復(fù)雜的認(rèn)證場(chǎng)景狡蝶,和js參數(shù)構(gòu)造等反爬措施。
selenium官方文檔:https://seleniumhq.github.io/selenium/docs/api/py/index.html
selenium官方網(wǎng)站:https://www.seleniumhq.org/
注意:selenium本身不是瀏覽器贮勃,它是一個(gè)瀏覽器驅(qū)動(dòng)
2.安裝
2.1 selenium的安裝
selenium的安裝非常簡(jiǎn)單贪惹,一般情況下在命令行運(yùn)行:
pip install selenium
2.2 瀏覽器驅(qū)動(dòng)安裝
selenium是通過瀏覽器驅(qū)動(dòng)來操作瀏覽器的。不同的瀏覽器需要下載不同的驅(qū)動(dòng)寂嘉。
上表是主要的幾大瀏覽器的驅(qū)動(dòng)下載地址奏瞬。
注意:https://blog.csdn.net/yoyocat915/article/details/80580066-------2019 Selenium Chrome版本與chromedriver兼容版本對(duì)照表。
注意:https://jingyan.baidu.com/article/fea4511a2a5270f7bb9125dc.html----搭建python下selenium驅(qū)動(dòng)google chrome環(huán)境
我們以chrome為例泉孩,驅(qū)動(dòng)和瀏覽器版本對(duì)應(yīng)硼端,所以首先你要看你電腦中的瀏覽器什么版本。
chromedriver.exe
显蝌,linux下是chromedriver
(無后綴名)。下載好后將驅(qū)動(dòng)文件放到環(huán)境變量中的文件夾下,可以放到python解釋器的根目錄曼尊。
3.開始使用
3.1簡(jiǎn)單案例
安裝好環(huán)境后,我們就可以開始使用了
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 打開谷歌瀏覽器并且創(chuàng)建谷歌瀏覽器的實(shí)例
driver = webdriver.Chrome('D:\\Pycharm\\high_spider\\chromedriver.exe')
# 訪問頁面
driver.get('http://www.python.org') #等到頁面加載完畢脏嚷,onload事件觸發(fā)才會(huì)返回骆撇,但是對(duì)于ajax請(qǐng)求不知道何時(shí)進(jìn)行加載。
# 獲取屬性name='q'的元素
elem = driver.find_element_by_name('q')
# 清空它的text值父叙,如果它是一個(gè)可以輸入text的元素
elem.clear()
# 模擬輸入'pycon'
elem.send_keys('pycon')
# 模擬回車鍵進(jìn)行搜索
elem.send_keys(Keys.ENTER)
time.sleep(3)
# 關(guān)閉瀏覽器
driver.close()
上面的代碼會(huì)代開谷歌瀏覽器神郊,然后訪問http://www.python.org
,在搜索框輸入pycon
,然后回車,最后關(guān)閉瀏覽器趾唱,這一切就像有人操作一樣涌乳。
3.2代碼解釋
selenium.webdriver
模塊提供了所有的瀏覽器驅(qū)動(dòng)實(shí)現(xiàn)。目前支持的瀏覽器有甜癞,Firefox
, Chrome
,IE
等主流瀏覽器夕晓。Keys
類提供了鍵盤按鍵例如Enter
,F1
,ALT
等等。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
接下來悠咱,創(chuàng)建谷歌瀏覽器驅(qū)動(dòng)的實(shí)例
driver = webdriver.Chrome()
driver.get
方法將會(huì)訪問提供的URL的頁面蒸辆。WebDriver會(huì)等到頁面完全加載(也就是說,“onload”事件已經(jīng)觸發(fā))之后才會(huì)返回析既。值得注意的是躬贡,如果您的頁面在加載時(shí)使用了大量AJAX,那么WebDriver可能不知道它何時(shí)完全加載完畢眼坏。
driver.get("http://www.python.org")
WebDriver提供了一些通過find_element_by_*
的方法來查找元素拂玻。例如,元素input text
能夠被方法find_element_by_name
方法通過它的name
屬性定位宰译。
elem = driver.find_element_by_name("q")
接下來檐蚜,我們發(fā)送鍵,這類似于使用鍵盤輸入鍵囤屹“旧酰可以使用selenium.webdriver.common.keys
導(dǎo)入的Keys
類來發(fā)送特殊的功能鍵。為了安全肋坚,我們首先清空任何input
標(biāo)簽輸入框中預(yù)填充的文本(例如“Search”)以免它會(huì)影響我們的搜索結(jié)果:
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
最后乡括,關(guān)閉瀏覽器窗口。您還可以調(diào)用quit方法而不是close智厌。退出將退出整個(gè)瀏覽器(quit)诲泌,而關(guān)閉將關(guān)閉一個(gè)標(biāo)簽頁(close),但如果只有一個(gè)標(biāo)簽頁是打開的铣鹏,默認(rèn)情況下敷扫,大多數(shù)瀏覽器將完全退出。
driver.close()
補(bǔ)充點(diǎn):
chromedriver.exe下載好后進(jìn)行相應(yīng)的環(huán)境配置有3種方式:
(1)直接將chromedriver.exe所在的絕對(duì)路徑配置到系統(tǒng)環(huán)境變量path中去。
(2)將chromedriver.exe放到和虛擬環(huán)境下的python.exe同級(jí)目錄下即可葵第。
(3)直接在
webdriver.Chrome()
的括號(hào)中進(jìn)行添加chromedriver.exe的絕對(duì)路徑即可绘迁。
from selenium import webdriver
webdriver.Chrome('d:\\ji\\chromedriver.exe')