Python 使用selenium實現網頁爬取

2021-09-29 01:36:57 字數 2382 閱讀 2325

先來認識下selenium  

selenium  是乙個用於web應用程式測試的工具。selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括ie(7, 8, 9, 10, 11),mozilla firefox,safari,google chrome,opera等。

就是說selenium  可以實現瀏覽器的模擬操作,我們就可以通過模擬實現網頁爬取。

好處就是可以簡單的繞過驗證碼機制(只需首次輸入),去掉登入、cookie更新、重定向等的煩惱。

1、環境

2、依賴庫安裝 

pip install selenium

3、依賴庫引用

from selenium import webdriver
4、驗證碼登入,提供自動輸入使用者名稱、密碼,手動控制台輸入驗證碼

loginurl = ''  # 登入頁面

# 載入webdriver驅動,用於獲取登入頁面標籤屬性

driver = webdriver.chrome()

driver.get(loginurl) # 請求登入頁面

driver.find_element_by_class_name('username').clear() # 獲取使用者名稱輸入框,並先清空

driver.find_element_by_class_name('username').send_keys('使用者名稱') # 輸入使用者名稱

driver.find_element_by_class_name('password').clear() # 獲取密碼框,並清空

driver.find_element_by_class_name('password').send_keys('密碼') # 輸入密碼

captcha = driver.find_element_by_class_name('yzm_img') # 獲取驗證碼標籤

submit = driver.find_element_by_class_name('submit_btn') # 獲取提交按鈕

# 判斷是否需要驗證碼

if captcha:

captcha_field = driver.find_element_by_class_name('yzm') # 獲取驗證碼輸入框

text = input("請輸入驗證碼:") # 控制欄輸入驗證碼

captcha_field.send_keys(text) # 將輸入的驗證碼傳遞給selenium開啟的瀏覽器

submit.click() # 按鈕提交並登入

else:

submit.click() # 無驗證碼則直接登入提交

5、注意事項1,瀏覽器載入問題,兩種等待方法,常用方法二

time.sleep(3)  # 強制等待,休眠3秒

driver.implicitly_wait(60) # 隱性等待,載入完就下一步否則最長等60秒,

5、注意事項2,八種選擇方法

webdriver 提供了一系列的物件定位方法,常用的有以下幾種:

詳見6、注意事項3,獲取一組元素記得使用find_elements,如

tr = div.find_elements_by_tag_name('tr')[1]

td = tr.find_elements_by_tag_name('td')

time = td[0].text

7、class含有空格時解決方法

在實際進行元素定位時,經常發現class name是有多個class組合的復合類,中間以空格隔開。如果直接進行定位會出現報錯,可以通過以下方式處理:

driver.find_element_by_class_name('yzm_img')

#class屬性唯一但是有空格,選擇空格兩邊唯一的那乙個

self.driver.find_elements_by_class_name('table-dragcolumn')[0].click()

#若空格隔開的class不唯一可以通過索引進行定位

driver.find_element_by_css_selector('.dtb-style-1.table-dragcolumns').click()

#通過css方法進行定位(空格以『.』代替)

8、多層級元素獲取

div = driver.find_element_by_id('tttggg')

tr = div.find_elements_by_tag_name('tr')[1]

td = tr.find_elements_by_tag_name('td')

time = td[0].text

自動化測試指令碼 測試百度搜尋Selenium

自動化測試指令碼 測試用例 測試步驟 1 啟動瀏覽器 3 定位搜尋輸入框,記錄下輸入框元素的xpath表示式 id kw 6 在搜尋結果列表去判斷是否存在知乎官網這個鏈結 7 退出瀏覽器,結束測試 測試指令碼 import time from selenium import webdriver 開啟...

python元類的使用 python使用元類

原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...

Python精通 Python函式使用

在程式設計意義上的函式其實是指完成某種操作的 塊,當然這個是個人的理解,但是這個概念在所有的程式語言中都是通用的。這個 塊用來完成某寫特定的操作。但是在數學上的函式卻是表示某種對應關係,這兩者之間還是有一定的區別的。但是在某種角度上講我們所程式設計的這種 塊其實就是表示的是引數與返回值之間的關係。從...