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