Selenium定位iframe動態ID


轉載出處:https://www.jianshu.com/p/5af3974c40c7

                                  126郵箱實例

開頭雞湯:不忘初心,方得始終。

測試環境搭建:

Python3.5版本     下載地址:https://www.python.org/

selenium3.11版本   通過pip install selenium ==3.11下載的selenum版本(最好用這種方式指定對應版本)

Firfox57版本  

Firfox57安裝包:https://pan.baidu.com/s/13NjOHte5b1Gq_p-OiyrN9Q

Firfox57驅動:  https://github.com/mozilla/geckodriver/releases(V0.21.0版本)

驅動版本截圖:

 

 

 

實例部分:

使用Firefox57打開網址 https://mail.126.com/ 使用F12打開輔助定位工具,通過定位發現登錄框實際是在iframe里,瀏覽器每次打開界面,id都是不一樣的,動態id的特征是后續增加了許多數字,例如:

 

 

 

非動態的iframe可以通過以下方式定位

有id,並且唯一,直接寫id

driver.switch_to_frame("x-URS-iframe")

driver.switch_to.frame("x-URS-iframe")(較新版本推薦使用方法)

有name,並且唯一,直接寫name

driver.switch_to_frame("xxxx")

driver.switch_to.frame("xxxx") (較新版本推薦使用方法)

無id,無name,先定位iframe元素

iframe = driver.find_elements_by_tag_name("iframe")[0]

driver.switch_to_frame(iframe)

driver.switch_to.frame(iframe) (較新版本推薦使用方法)

 

 

如果是動態Id需要借助xpath部分元素屬性定位,xpath中提供了三個非常好的方法來為我們定位部分屬性值:

driver.find_element_by_xpath

("//div[contains(@id, 'btn-attention')]")

driver.find_element_by_xpath

("//div[starts-with(@id, 'btn-attention')]")

driver.find_element_by_xpath

("//div[ends-with(@id, 'btn-attention')]") 

# 這個需要結尾是‘btn-attention’

contains(a, b) 如果a中含有字符串b,則返回true,否則返回false

starts-with(a, b) 如果a是以字符串b開頭,返回true,否則返回false

ends-with(a, b) 如果a是以字符串b結尾,返回true,否則返回false

 

代碼如下:

#引入模塊

from selenium import webdriver

#引入時間模塊

import time

#實例化驅動對象

driver = webdriver.Firefox()(把驅動放到python的script可以正常調用使用這種寫法)

driver = webdriver.Firefox(executable_path=r'F:\Python\Scripts\geckodriver.exe')(找不到驅動可以通過寫路徑的方式來調用)

#打開126郵箱

driver.get("https://mail.126.com/") 

#瀏覽器最大化

driver.maximize_window()

#休眠3秒,方式刷新不出來。

time.sleep(3)

#根據xpath定位ifram表單

driver.switch_to.frame(driver.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]"))

#定位輸入賬號

driver.find_element_by_name("email").send_keys("xxxxxxxx")

#定位輸入密碼

driver.find_element_by_name("password").send_keys("xxxxxxxx")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM