最近工作會用到selenium來自動化操作一些重復(fù)的工作,那么在用selenium寫代碼的過程中,又順手整理了一些常用的操作,分享給大家。
常用元素定位方法
雖然有關(guān)selenium定位元素的方法有很多種,但是對于沒有深入學(xué)習(xí),尤其是沒有前端知識的朋友來說,常用的就那幾招。
基于xpath和css
一般來說,我首選xpath,因?yàn)橹苯觕hrome右鍵就能直接復(fù)制路徑
driver.find_element("xpath", "xxxxxx")
但是有時(shí)xpath是動態(tài)變化的,直接復(fù)制一下不頂用,所以第二選項(xiàng)是基于CSS
driver.find_element("css_selector", "xxxxxx")
你要問我兩個(gè)都是直接復(fù)制粘貼,有手就行,為啥css排第二?因?yàn)榇蠖鄶?shù)情況下,css樣式的代碼都是長長一坨,萬一不頂用,刪起來太麻煩了。
基于屬性
如果上面懶人方法不管用,一般我會再嘗試是否能找到一些唯一的屬性來定位,這就要自己找到想定位的標(biāo)簽,觀察其對應(yīng)html屬性,例如使用id
driver.find_element("id", "xxxxxx")
或者是class_name
driver.find_element("class_name", "xxxxxx")
不過這種方法,要求其屬性值是唯一的,所以也不是萬能的,如果這兩種方法都沒法讓你順利定位到頁面元素,那可能就要花一點(diǎn)功夫去深入研究了。
輸入本文
有時(shí)我們需要在輸入框輸入一些文本,例如賬號密碼或者SQL語句才能執(zhí)行下一步操作,使用selenium也可以輕松完成。
如果輸入框是使用ipput標(biāo)簽,那么就可以使用上面的定位元素方法定位到輸入框,并使用send_keys來傳入文本。
driver.find_element("xpath", "xxxxxx").send_keys("xxxxxx")
但如果頁面輸入框,并不是<input>形式寫的,更多的時(shí)候是一個(gè)富文本編輯器寫在div里面,或者是套在iframe標(biāo)簽里面,這種情況都無法直接通過定位元素來傳遞文本,大多數(shù)情況需要先點(diǎn)擊激活編輯器,然后再send_keys,例如下面的形式
-
driver.find_element(By.CSS_SELECTOR, ".view-lines").click() #點(diǎn)擊編輯器
-
driver.find_element(By.CSS_SELECTOR, ".inputarea").send_keys("xxxxx")
但這種情況,編輯框都是動態(tài)加載的,在實(shí)際操作時(shí)需要靈活運(yùn)用。
等待指定元素加載完畢
有時(shí)我們需要的頁面內(nèi)容需要先通過幾步點(diǎn)擊才能出現(xiàn),自然而然就會想到先等幾秒,再去操作,但如果對每個(gè)按鈕都是強(qiáng)制等待一個(gè)固定的時(shí)間,程序就會顯得笨笨的,selenium當(dāng)然提供一個(gè)方法去讓你告訴程序,等到某個(gè)元素一出來,就去執(zhí)行后面的頁面操作
-
from selenium.webdriver.support.ui import WebDriverWait
-
from selenium.webdriver.support import expected_conditions as EC
-
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.el-table__row'))).click()
上面的代碼就是告訴程序,在30秒內(nèi)等到含有'.el-table__row'這個(gè)樣式的css元素出現(xiàn),就去點(diǎn)擊它,如果超過30秒就超時(shí),后面可以是重試或者異常處理。
接管當(dāng)前瀏覽器
最后一個(gè)實(shí)用的技巧,就是如果讓selenium接管當(dāng)前的瀏覽器。
如果你嘗試寫過selenium就會知道,每次執(zhí)行程序,就會啟動一個(gè)新的chrome進(jìn)程,從頭開始執(zhí)行操作,所有登錄過的cookie都沒了,你需要全部重新操作一遍,這樣就很麻煩。
又或者,你根本就不會破解登錄,你的任務(wù)是可以自動化的,但是需要先進(jìn)行登錄,登錄模塊你又搞不定,難道就不能告訴selenium你就用我登錄好的瀏覽器去執(zhí)行代碼嗎?
答案是可以且操作簡單的,我們只需要在命令行先使用下面的代碼啟動一個(gè)遠(yuǎn)程調(diào)試模式的chrome。
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:/user/liuzaoqi/desktop"
這時(shí)會新增一個(gè)瀏覽器窗口,不要關(guān)閉他,之后在你的Python自動化調(diào)試代碼開頭添加如下內(nèi)容
-
from selenium import webdriver
-
from selenium.webdriver.chrome.options import Options
-
chrome_options=Options()
-
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
-
driver = webdriver.Chrome(chrome_options=chrome_options) # 啟動瀏覽器
文章來源:http://www.zghlxwxcb.cn/news/detail-846017.html
現(xiàn)在,selenium就接管了剛剛系統(tǒng)打開的瀏覽器,你的代碼也將直接在瀏覽器當(dāng)前打開的頁面下執(zhí)行,你完全可以先手動將你無法自動化的操作執(zhí)行完畢,再去寫其他的代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-846017.html
到了這里,關(guān)于分享幾個(gè) Selenium 自動化常用操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!