国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Selenium頁(yè)面跳轉(zhuǎn)后的元素定位-switch_to.window()使用

這篇具有很好參考價(jià)值的文章主要介紹了Selenium頁(yè)面跳轉(zhuǎn)后的元素定位-switch_to.window()使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Selenium頁(yè)面跳轉(zhuǎn)后的元素定位-switch_to.window()

背景:

在使用Selenium獲取網(wǎng)頁(yè)數(shù)據(jù)時(shí)常常會(huì)因?yàn)轫?yè)面跳轉(zhuǎn)導(dǎo)致,后續(xù)的頁(yè)面數(shù)據(jù)無(wú)法正常獲取。究極原因,都是因?yàn)榇藭r(shí)的頁(yè)面對(duì)象還是上一個(gè)頁(yè)面,使用當(dāng)前頁(yè)面的定位條件當(dāng)然會(huì)報(bào)錯(cuò)(因?yàn)樯弦粋€(gè)頁(yè)面根本不存在這些定位條件)。因此我們可以通過(guò)switch_to.window()進(jìn)行頁(yè)面的切換。

使用方法

switch_to.window()存在以下幾種用法,下面是詳細(xì)示例講解:
URL:http://www.gjgwy.net/zkzx/gjgwy/345695.html(公考資料網(wǎng))

driver.switch_to.window(driver.window_handles[-1])  定位到最新打開(kāi)窗口
driver.switch_to.window(driver.window_handles[-2]) 定位到倒數(shù)第二個(gè)窗口
driver.switch_to.window(driver.window_handles[0]) 定位最開(kāi)始的頁(yè)面

1、driver.switch_to.window(driver.window_handles[-1]) 定位到最新打開(kāi)窗口

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
url='http://www.gjgwy.net/zkzx/gjgwy/345695.html'
# 初始實(shí)例化-谷歌瀏覽器
driver=webdriver.Chrome()
#獲取網(wǎng)址信息
driver.get(url)
#判斷是否有彈窗,存在彈窗則關(guān)閉,沒(méi)有繼續(xù)執(zhí)行即可
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
# 點(diǎn)擊浙江省份,查看浙江省的公考信息,實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),打開(kāi)新的頁(yè)面。
driver.find_element(By.XPATH, '/html/body/div[4]/div/div[2]/a[2]').click()
time.sleep(2)
# 定位到新開(kāi)頁(yè)面
driver.switch_to.window(driver.window_handles[-1])
time.sleep(2)
# 判斷是否存在彈窗,存在就獲取彈窗,然后關(guān)閉;
#若網(wǎng)頁(yè)刷新速度很慢,彈窗未出,就已經(jīng)拿到元素信息,就不需要關(guān)閉彈窗;
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
next_page =driver.find_element(By.XPATH,'/html/body/table[1]/tbody/tr[1]/td[2]/div/div/ul/li[2]')
print(next_page.text)
time.sleep(1000)
# 關(guān)閉頁(yè)面
driver.close()

此時(shí)next_page獲取的值即為打開(kāi)的第二個(gè)頁(yè)面上的元素值,而非第一個(gè)頁(yè)面的。

*next_page=【職位表】2022年遼寧公務(wù)員考試職位表*

倘若把切換窗口的代碼注釋掉,則會(huì)上報(bào)錯(cuò)誤提示不存在的定位信息,如下:

# driver.switch_to.window(driver.window_handles[-1])
D:\workplace\venv\Scripts\python.exe D:\workplace\venv\Scripts\tietie.py 
Traceback (most recent call last):
  File "D:\workplace\venv\Scripts\tietie.py", line 19, in <module>
    next_page=driver.find_element(By.XPATH,'/html/body/table[1]/tbody/tr[1]/td[2]/div/div/ul/li[2]')
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\workplace\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 861, in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\workplace\venv\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 444, in execute
    self.error_handler.check_response(response)
  File "D:\workplace\venv\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 249, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/table[1]/tbody/tr[1]/td[2]/div/div/ul/li[2]"}
  (Session info: chrome=105.0.5195.102)
Stacktrace:
Backtrace:
	Ordinal0 [0x0029DF13+2219795]
	Ordinal0 [0x00232841+1779777]
	Ordinal0 [0x0014423D+803389]
	Ordinal0 [0x00173025+995365]
	Ordinal0 [0x001731EB+995819]
	Ordinal0 [0x001A0F52+1183570]
	Ordinal0 [0x0018E844+1108036]
	Ordinal0 [0x0019F192+1175954]
	Ordinal0 [0x0018E616+1107478]
	Ordinal0 [0x00167F89+950153]
	Ordinal0 [0x00168F56+954198]
	GetHandleVerifier [0x00592CB2+3040210]
	GetHandleVerifier [0x00582BB4+2974420]
	GetHandleVerifier [0x00336A0A+565546]
	GetHandleVerifier [0x00335680+560544]
	Ordinal0 [0x00239A5C+1808988]
	Ordinal0 [0x0023E3A8+1827752]
	Ordinal0 [0x0023E495+1827989]
	Ordinal0 [0x002480A4+1867940]
	BaseThreadInitThunk [0x7728FEF9+25]
	RtlGetAppContainerNamedObjectPath [0x77447BBE+286]
	RtlGetAppContainerNamedObjectPath [0x77447B8E+238]
	(No symbol) [0x00000000]

2、driver.switch_to.window(driver.window_handles[-2]) 定位到倒數(shù)第二個(gè)窗口

此時(shí)我們?cè)谏厦娴幕A(chǔ)上,在跳轉(zhuǎn)一個(gè)頁(yè)面,來(lái)實(shí)現(xiàn)打開(kāi)三個(gè)窗口的情況。
當(dāng)然此時(shí),不用driver.switch_to.window(driver.window_handles[-1]),這條指令,此時(shí)的頁(yè)面指向也是第二個(gè)頁(yè)面,如下,但是為了展示[-2]的作用,在這里先把頁(yè)面定位到最新的窗口,然后再通過(guò)命令定位到倒數(shù)第二個(gè)頁(yè)面。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
url='http://www.gjgwy.net/zkzx/gjgwy/345695.html'
# 初始實(shí)例化-谷歌瀏覽器
driver=webdriver.Chrome()
#獲取網(wǎng)址信息
driver.get(url)
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
# 點(diǎn)擊浙江省份,查看浙江省的公考信息,實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),打開(kāi)新的頁(yè)面。
driver.find_element(By.XPATH, '/html/body/div[4]/div/div[2]/a[2]').click()
# 定位到新開(kāi)頁(yè)面
driver.switch_to.window(driver.window_handles[-1])
time.sleep(5)
# 判斷是否存在彈窗,存在就獲取彈窗,然后關(guān)閉;
#若網(wǎng)頁(yè)刷新速度很慢,彈窗未出,就已經(jīng)拿到元素信息,就不需要關(guān)閉彈窗;
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
time.sleep(2)
# 跳轉(zhuǎn)到第三個(gè)頁(yè)面
driver.find_element(By.XPATH, '/html/body/table[1]/tbody/tr[1]/td[2]/div/div/ul/li[2]').click()
# 定位到最新的第三個(gè)頁(yè)面上
driver.switch_to.window(driver.window_handles[-1])
# 輸出最新頁(yè)面上的信息
e=driver.find_element(By.XPATH,'/html/body/div[10]/div[1]/div[1]/div[2]')
print(e.text)
# 通過(guò)命令定位到倒數(shù)第二頁(yè)面
driver.switch_to.window(driver.window_handles[-2])
# 輸出倒數(shù)第二個(gè)頁(yè)面的信息
a=driver.find_element(By.XPATH,'/html/body/table[1]/tbody/tr[1]/td[2]/div/div/ul/li[2]')
print(a.text)
time.sleep(1000)
# 關(guān)閉頁(yè)面
driver.close()

輸出結(jié)果為:

#第三個(gè)頁(yè)面的信息
2022年遼寧省考試錄用公務(wù)員公告及職位表現(xiàn)已發(fā)布,報(bào)名時(shí)間為20222189時(shí)至22224時(shí),筆試時(shí)間為2022326日、27日。

點(diǎn)擊下載:2022年遼寧省考試錄用公務(wù)員職位表(提取碼:2h97)

2022年遼寧公務(wù)員考試職位表
上一篇: 2022年河南公務(wù)員考試網(wǎng)站及政策咨詢電話
下一篇: 2022年遼寧公務(wù)員考試報(bào)考指南
#倒數(shù)第二個(gè)頁(yè)面的信息
【職位表】2022年遼寧公務(wù)員考試職位表

3、driver.switch_to.window(driver.window_handles[0]) 定位最開(kāi)始的頁(yè)面

還是沿用上面的,三個(gè)頁(yè)面狀態(tài),直接定位到第一個(gè)頁(yè)面上的信息。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
url='http://www.gjgwy.net/zkzx/gjgwy/345695.html'
# 初始實(shí)例化-谷歌瀏覽器
driver=webdriver.Chrome()
#獲取網(wǎng)址信息
driver.get(url)
#存在彈窗即可關(guān)閉,不存在繼續(xù)執(zhí)行
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
# 點(diǎn)擊浙江省份,查看浙江省的公考信息,實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),打開(kāi)新的頁(yè)面。
driver.find_element(By.XPATH,'/html/body/div[4]/div/div[2]/a[2]').click()
time.sleep(2)
# 定位到新開(kāi)頁(yè)面
driver.switch_to.window(driver.window_handles[-1])
time.sleep(5)
# 判斷是否存在彈窗,存在就獲取彈窗,然后關(guān)閉;
#若網(wǎng)頁(yè)刷新速度很慢,彈窗未出,就已經(jīng)拿到元素信息,就不需要關(guān)閉彈窗;
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
# 跳轉(zhuǎn)到第三個(gè)頁(yè)面
driver.find_element(By.XPATH,'/html/body/table[1]/tbody/tr[1]/td[2]/div/div/ul/li[2]').click()
# 定位到最新的第三個(gè)頁(yè)面上
driver.switch_to.window(driver.window_handles[-1])
# 輸出最新頁(yè)面上的信息
e=driver.find_element(By.XPATH,'/html/body/div[10]/div[1]/div[1]/div[2]')
print(e.text)
# 通過(guò)命令定位到最開(kāi)始的窗口
driver.switch_to.window(driver.window_handles[0])
# 若存在彈窗,則關(guān)掉
try:
    driver.find_element(By.XPATH, '//*[@id="close_alert"]').click()
except:
    print("沒(méi)有彈窗,繼續(xù)執(zhí)行")
# 輸出最開(kāi)始窗口的信息
a=driver.find_element(By.XPATH,'/html/body/div[4]/div/div[2]/a[2]')
print(a.text)
time.sleep(1000)
# 關(guān)閉頁(yè)面
driver.close()

輸出結(jié)果為:

D:\workplace\venv\Scripts\python.exe D:\workplace\venv\Scripts\tietie.py 
#最后頁(yè)面的信息
2022年遼寧省考試錄用公務(wù)員公告及職位表現(xiàn)已發(fā)布,報(bào)名時(shí)間為20222189時(shí)至22224時(shí),筆試時(shí)間為2022326日、27日。

點(diǎn)擊下載:2022年遼寧省考試錄用公務(wù)員職位表(提取碼:2h97)

2022年遼寧公務(wù)員考試職位表
上一篇: 2022年河南公務(wù)員考試網(wǎng)站及政策咨詢電話
下一篇: 2022年遼寧公務(wù)員考試報(bào)考指南
#最開(kāi)始頁(yè)面信息
遼寧

總結(jié)

在執(zhí)行測(cè)試過(guò)程中會(huì)存在兩個(gè)細(xì)節(jié)但是影響進(jìn)程的問(wèn)題:
1、進(jìn)入一個(gè)新頁(yè)面,有可能存在彈窗的情況,如果存在彈窗,那么當(dāng)前頁(yè)面就會(huì)定位在彈窗上,那一定不是你想要的元素,因此,我們可以關(guān)閉它,之后再繼續(xù)執(zhí)行。
2、執(zhí)行過(guò)程中發(fā)現(xiàn),有的時(shí)候,代碼,元素條件都沒(méi)有問(wèn)題,但是就是報(bào)錯(cuò),這是有可能網(wǎng)速的問(wèn)題,我們要學(xué)會(huì)善用time.sleep這個(gè)語(yǔ)句,預(yù)留充足的時(shí)間可以繼續(xù)執(zhí)行。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405884.html

到了這里,關(guān)于Selenium頁(yè)面跳轉(zhuǎn)后的元素定位-switch_to.window()使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【selenium自動(dòng)化測(cè)試】如何定位頁(yè)面元素,及對(duì)頁(yè)面元素的操作方法

    【selenium自動(dòng)化測(cè)試】如何定位頁(yè)面元素,及對(duì)頁(yè)面元素的操作方法

    selenium元素定位 ?selenium定位元素的方式有8種。 fild_element(by,value):by表示使用的定位方式,定位方式可以參見(jiàn)By類。value表示值,例如:根據(jù)id定位 By.ID,value=id屬性的值。該方法返回元素對(duì)象,返回值如下: 這個(gè)返回結(jié)果說(shuō)明:返回值為WebElement類的對(duì)象,元素在使用方法時(shí)

    2024年02月10日
    瀏覽(28)
  • vue路由跳轉(zhuǎn)后,刷新指定頁(yè)面。

    vue路由跳轉(zhuǎn)后,刷新指定頁(yè)面。

    ????????做項(xiàng)目遇到一個(gè)坑:A頁(yè)面帶參跳轉(zhuǎn)到B頁(yè)面,第二次跳轉(zhuǎn)時(shí)的參數(shù)與第一次時(shí)的參數(shù)不同,但是后臺(tái)查詢時(shí)還是使用的第一次的參數(shù)。需要手動(dòng)刷新之后,才會(huì)使用第二次參數(shù)。 ? ? ? ? 鑒于時(shí)間原因直接使用刷新頁(yè)面監(jiān)聽(tīng)路由的方法。在準(zhǔn)備跳轉(zhuǎn)的A頁(yè)面添加路

    2024年02月12日
    瀏覽(34)
  • selenium對(duì)于頁(yè)面改變的定位元素處理辦法

    selenium對(duì)于頁(yè)面改變的定位元素處理辦法

    在學(xué)習(xí)selenimu中,總是發(fā)現(xiàn)元素定位不到,想了各種辦法,最后總結(jié)大致有兩個(gè)原因。 1.等待時(shí)間不夠,頁(yè)面還沒(méi)有完全渲染就進(jìn)行操作,使用time模塊進(jìn)行等待。 2.換了頁(yè)面后,發(fā)現(xiàn)定位不到元素,因?yàn)闉g覽器還停留在最開(kāi)始的頁(yè)面,處理辦法,加一行代碼。 運(yùn)行結(jié)果: 缺

    2024年02月01日
    瀏覽(14)
  • vue單頁(yè)面實(shí)現(xiàn)路由跳轉(zhuǎn)后保留原頁(yè)面數(shù)據(jù)

    有時(shí)候在路由跳轉(zhuǎn)后,返回原頁(yè)面時(shí)需要保留之前的數(shù)據(jù),即不銷毀頁(yè)面。 頁(yè)面的緩存,需要用到vue的內(nèi)置組件keep-alive,來(lái)緩存列表頁(yè)面,同時(shí)配合路由選項(xiàng)來(lái)更改頁(yè)面的數(shù)據(jù)。 在設(shè)置keep-alive緩存的組件中,首次進(jìn)入組件,會(huì)一次調(diào)用組件的鉤子函數(shù):created -- mounted --ac

    2024年02月15日
    瀏覽(22)
  • 【Python】Python 模塊用法:selenium 4 版本頁(yè)面元素定位方法匯總

    【Python】Python 模塊用法:selenium 4 版本頁(yè)面元素定位方法匯總

    目錄 一、定位頁(yè)面元素方法源碼說(shuō)明? (1)Webdriver.common (2)selenium.webdriver.common.by (3)By 二、定位頁(yè)面元素方法用法匯總 (1)2.0 及以下低版本 selenium :By 定位頁(yè)面元素方法用法(可忽略) (2)3.0 ~ 3.9 版本 selenium:By 定位頁(yè)面元素方法用法 (3)4.0 ~ 4.9 版本 selenium:

    2023年04月13日
    瀏覽(40)
  • 基于Java+Selenium的WebUI自動(dòng)化測(cè)試框架(一)---頁(yè)面元素定位器

    基于Java+Selenium的WebUI自動(dòng)化測(cè)試框架(一)---頁(yè)面元素定位器

    ??? 交流討論: 歡迎加入我們一起學(xué)習(xí)! ?? 資源分享 : 耗時(shí)200+小時(shí)精選的「軟件測(cè)試」資料包 ??? 教程推薦: 火遍全網(wǎng)的《軟件測(cè)試》教程?? ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)指正! 對(duì)于自動(dòng)化測(cè)試,尤其是UI的自動(dòng)化測(cè)試。是很多做黑盒功能測(cè)試的同

    2024年03月17日
    瀏覽(57)
  • python selenium 定位鼠標(biāo)懸浮后的新彈窗數(shù)據(jù)

    python selenium 定位鼠標(biāo)懸浮后的新彈窗數(shù)據(jù)

    ? ? ? ? 最近需要獲取網(wǎng)頁(yè)上的標(biāo)簽數(shù)據(jù),但是標(biāo)簽大于3個(gè)以后是隱藏的,需要鼠標(biāo)hover上去才顯示。如下圖,圖一是剛進(jìn)來(lái)界面展示的,需要知道額外的7個(gè)標(biāo)簽則需要將鼠標(biāo)移動(dòng)到目標(biāo)上面去。 ? ? ? ? ? ?但是比較尷尬的一個(gè)點(diǎn)是,當(dāng)游覽器打開(kāi)F12后,使用鼠標(biāo)去選中關(guān)

    2024年02月06日
    瀏覽(14)
  • 【深入淺出Selenium庫(kù)的百變玩法】: 掌握Web自動(dòng)化測(cè)試的關(guān)鍵技術(shù)和策略,包括元素定位、頁(yè)面操作、動(dòng)態(tài)內(nèi)容處理等,適用于初學(xué)者和高級(jí)開(kāi)發(fā)者的綜合指南

    Selenium是一個(gè)功能強(qiáng)大的庫(kù),支持多種高級(jí)操作,如處理多窗口、多標(biāo)簽頁(yè)、鍵盤與鼠標(biāo)事件、滾動(dòng)操作等。掌握Selenium可以大大提高Web應(yīng)用的測(cè)試效率和覆蓋范圍。希望這篇文章能幫助你開(kāi)啟Selenium進(jìn)行自動(dòng)化測(cè)試的新篇章。 Selenium也是一個(gè)廣泛使用的自動(dòng)化測(cè)試工具,它支

    2024年02月20日
    瀏覽(54)
  • selenium元素定位,獲取某個(gè)元素下的所有元素

    selenium元素定位,獲取某個(gè)元素下的所有元素

    例: 想要獲取所有的li元素: 結(jié)果如下 獲取到元素后可以直接進(jìn)行操作: list_tab[2].click() list_tab[5].send_keys(‘123456’)

    2024年02月16日
    瀏覽(21)
  • 自學(xué)Python 69 Selenium八大元素定位方法(新版BY方法)_selenium定位元素的方法和優(yōu)缺點(diǎn)

    自學(xué)Python 69 Selenium八大元素定位方法(新版BY方法)_selenium定位元素的方法和優(yōu)缺點(diǎn)

    文章目錄 Python Selenium八大元素定位方法(新版BY方法) 前言 一、常用的八種定位方法(新舊對(duì)比) 二、查看網(wǎng)頁(yè)元素 三、八大元素定位示例 1、id定位 2、name定位 3、class定位 4、tag定位 5、link定位 6、partial_link定位 7、xpath定位 8、CSS定位 在學(xué)習(xí)使用Selenium對(duì)網(wǎng)頁(yè)元素進(jìn)行定位時(shí)

    2024年04月22日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包