python+selenium實現163郵箱登陸—iframe動態ID定位 及常用定位方法


今天發現之前的登錄163郵箱腳本定位不到iframe了,原因是iframe拼接了動態ID,修改后的腳本如下:

from selenium import webdriver

driver = webdriver.Firefox()
driver.maximize_window()

driver.get('http://mail.163.com')

driver.find_element_by_id('switchAccountLogin').click()
iframe = driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe') # 使用Xpath選定位到iframe
driver.switch_to.frame(iframe)          # 切換iframe
# iframe = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")  # 使用Xpath提供的contains定位
# driver.switch_to.frame(iframe)
driver.find_element_by_name('email').send_keys('name')
driver.find_element_by_name('password').send_keys('password')
driver.find_element_by_id('dologin').click()

總結一下常見iframe定位方法。

一、非動態的iframe,通常通過以下方式定位:

1.有id,如果唯一,可直接寫id

  driver.switch_to.frame("id")

2.有name,如果唯一,可直接寫name

  driver.switch_to.frame("name")

3.無id,無name,可先定位到iframe元素 (該方法也通常用於定位動態ID)

  iframe = driver.find_elements_by_tag_name("iframe")[0]  (也可以通過Xpath、CSS等定位方法)

  driver.switch_to.frame(iframe)

 

二、遇到動態Id可以利用xpath等元素屬性來定位,下面列舉xpath中提供的三個非常好的方法:

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

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

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

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

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

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




免責聲明!

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



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