日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Selenium 高阶操作

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Selenium 高阶操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、多標簽之間的切換

場景:有的時候點擊一個鏈接,新頁面并非由當前頁面跳轉過去,而是新開一個頁面打開,這種情況下,計算機需要識別多標簽或窗口的情況。

1.獲取所有窗口的句柄

handles = driver. window_handles

調用該方法會得到一個列表,在selenium運行過程中的每一個窗口都有一個對應的值存放在里面。

2.通過窗口的句柄進入的窗口

driver.switch_to_window(handles[n])driver.switch_to.window(handles[n]) (推薦使用)

通過窗口句柄激活進入某一窗口

舉例:58同城多標簽切換

定位元素





代碼展示

二、多表單切換

在網頁中,表單嵌套是很常見的情況,尤其是在登錄的場景

1.什么是多表單?
實際上就是使用iframe/frame,引用了其他頁面的鏈接,真正的頁面數據并沒有出現在當前源碼中,但是在瀏覽器中我們看到,簡單理解可以使頁面中開了一個窗口顯示另一個頁面

2.處理方法

直接使用id值切換進表單

driver.switch_to.frame(value)/driver.switch_to_frame(value)

定位到表單元素,再切換進入

el = driver.find_element_by_xxx(value) driver.switch_to.frame(el) /driver.switch_to_frame(el)

舉例:qq空間進入賬號密碼登錄

元素定位


代碼展示

三、彈出框操作

1) 進入到彈出框中driver.switch_to.alert2) 接收警告accept()3) 解散警告dismiss()4) 發送文本到警告框send_keys(data)

舉例:百度設置
獲取元素


代碼展示

四、鼠標和鍵盤操作

1.鼠標操作

導入動作鏈類,動作鏈可以儲存鼠標的動作

from selenium.webdriver import ActionChains

獲取元素

el = driver.find_element_by_xxx(value)

對el執行右擊

context_click(el)

執行ActionChains中儲存的所有動作
perform()
例如:

ActionChains(driver).context_click(ele).perform() 點擊鼠標右鍵 ActionChains(driver). double_click(ele).perform() 點擊鼠標左鍵 ActionChains(driver).move_to_element(el).perform() 鼠標懸停

代碼展示:

2.鍵盤操作

鍵盤操作使用的是Keys類,一般配合send_keys使用

導入包

from selenium.webdriver.common.keys import Keys

常見的鍵盤操作

send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)send_keys(Keys.SPACE) 空格鍵(Space)send_keys(Keys.TAB) 制表鍵(Tab)send_keys(Keys.ESCAPE) 回退鍵(Esc)send_keys(Keys.ENTER) 回車鍵(Enter)send_keys(Keys.CONTROL,‘a’) 全選(Ctrl+A)send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)send_keys(Keys.CONTROL,‘v’) 粘貼(Ctrl+V)send_keys(Keys.F1) 鍵盤 F1 …… send_keys(Keys.F12) 鍵盤 F12

部分代碼展示:

五、瀏覽器等待

1.為什么要進行等待?

1.網速慢2.網站內容過多3.如果不進行等待而直接定位元素,可能會拋出異常

2.selenium中等待的分類:

強制等待顯示等待隱式等待

1.強制等待

# 導入定時等待庫 from time import sleep 或者 import time#表示強行等待10s在執行下一句代碼 這種等待方式時間到了就會執行下個語句,但比 較死板,不能保證在等待的時間內元素真正被加載了出來。而且如果等待的元素已經被 加載出來,還需要等待到時間才會執行下一句,浪費時間。 time.sleep(10)

2.隱式等待

driver.implicitly_wait(30) #等待30s這個等待表示在規定的時間內頁面的所有元素都加載完了就執行下一步,否則一直等到 時間截止,然后再繼續下一步。這個方法的缺點是你需要的元素已經加載出來了,但 頁面還沒有加載完,再需要繼續等待頁面加載完才能執行下一步操作。

注:隱式等待的作用域是全局,所以一般設置在整局代碼的頭幾行。
隱式等待采用全部設置,也就是說,你所有的findElement方法都會最多等待30s

3.顯式等待

需要導入的包 from selenium.webdriver.support.wait import WebDriverWait #導入顯性等待的包 from selenium.webdriver.support import expected_conditions as EC #判斷所需要的元素是否已經被加載出來 from selenium.webdriver.common.by import By #定位

WebDriverWait類是由WebDirver 提供的等待方法。顯示等待明確的要等到某個元素的出現,在設置時間內每隔x秒去判斷一下指定的元素是否加載完,加載完了就執行下一步,否則繼續每隔x秒去判斷,指定時間截止。如果超時就會拋出異常。

例如:

WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"g-hu")))

三者區別:

強制等待:傻瓜式等待,不智能 隱式等待:全局通用,只需設置一次,很智能(等到了就走,不會浪費時間) 顯式等待:等待元素處于特定條件的時候使用,很智能(等到了就走,不會浪費時間)

總結

以上是生活随笔為你收集整理的Selenium 高阶操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。