Python爬蟲之selenium高級功能
?
原文地址
表單操作
元素拖拽
頁面切換
彈窗處理
?
?
表單操作
表單里面會有文本框、密碼框、下拉框、登陸框等。
這些涉及與頁面的交互,比如輸入、刪除、點(diǎn)擊等。
前提是找到頁面中的元素。
例如下面有一個(gè)表單輸入框:
" text " name= " passwd " id= " passwd-id " />
獲取這個(gè)元素的方法:
element = driver.find_element_by_id( " passwd-id " ) element = driver.find_element_by_name( " passwd " ) element = driver.find_elements_by_tag_name( " input " ) element = driver.find_element_by_xpath( " //input[@id='passwd-id'] " )
注意:使用 xpath 的時(shí)候還需要注意的是,如果有多個(gè)元素匹配了 xpath,它只會返回第一個(gè)匹配的元素。如果沒有找到,那么會拋出?
NoSuchElementException
?的異常。
?
獲取元素之和就要進(jìn)行輸入與點(diǎn)擊操作了
輸入:
element.send_keys( " some text " )
點(diǎn)擊:
利用 Keys 這個(gè)類來模擬點(diǎn)擊某個(gè)按鍵,當(dāng)然首先你要獲取按鍵元素。
element.send_keys( " and some " , Keys.ARROW_DOWN)
第二種方法:我們獲取了按鍵元素,我們就可以使用click方法點(diǎn)擊了
button = broswer.find_element_by_class_name( ' btn-search ' ) # 點(diǎn)擊按鈕 button.click()
刪除:
當(dāng)你元素使用send.keys方法輸入字符后,輸入的內(nèi)容不會自動(dòng)清除,如果我們要輸入第二次,就要把第一次的內(nèi)容刪除掉:
element.clear()
?
上面都是簡單的操作,如果我們遇到下拉框應(yīng)該怎么辦呢
?WebDriver 中提供了一個(gè)叫 Select 的方法,可以幫助我們完成這些事情。
可以根據(jù)索引來選擇,可以根據(jù)值來選擇,可以根據(jù)文字來選擇。
from selenium.webdriver.support.ui import Select select = Select(driver.find_element_by_name( ' name ' )) select.select_by_index(index) select.select_by_visible_text( " text " ) select.select_by_value(value)
?
取消全部選擇:
select = Select(driver.find_element_by_id( ' id ' )) select.deselect_all()
獲取已選選擇:
select = Select(driver.find_element_by_xpath( " xpath " )) all_selected_options = select.all_selected_options
獲取可選選項(xiàng):
options = select.options
?
最后提交表單:
driver.find_element_by_id( " submit " ).click()
注意:WebDriver 會在表單中尋找它所在的表單,如果發(fā)現(xiàn)這個(gè)元素并沒有被表單所包圍,那么程序會拋出?
NoSuchElementException
?的異常。
?
?
元素拖拽
要完成元素的拖拽,首先你需要指定被拖動(dòng)的元素和拖動(dòng)目標(biāo)元素,然后利用 ActionChains 類來實(shí)現(xiàn)。
element = driver.find_element_by_name( " source " ) target = driver.find_element_by_name( " target " ) from selenium.webdriver import ActionChains action_chains = ActionChains(driver) action_chains.drag_and_drop(element, target).perform()
這樣就實(shí)現(xiàn)了元素從 source 拖動(dòng)到 target 的操作。
?
?
頁面切換
一個(gè)瀏覽器肯定會有很多窗口,所以我們肯定要有方法來實(shí)現(xiàn)窗口的切換。切換窗口的方法如下:
driver.switch_to_window( " windowName " )
另外你可以使用 window_handles 方法來獲取每個(gè)窗口的操作對象。例如:
for handle in driver.window_handles: driver.switch_to_window(handle)
另外切換 frame 的方法如下
driver.switch_to_frame( " frameName.0.child " )
這樣焦點(diǎn)會切換到一個(gè) name 為 child 的 frame 上。
?
彈窗處理
當(dāng)你出發(fā)了某個(gè)事件之后,頁面出現(xiàn)了彈窗提示,那么你怎樣來處理這個(gè)提示或者獲取提示信息呢?
alert = driver.switch_to_alert()
通過上述方法可以獲取彈窗對象。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
