python+selenium 126郵箱定位frame報錯原因(解決方法:用tag_name定位)

在網上找了一些教程,試了很久一直會報錯

 

教程裏的代碼

# coding=utf-8

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.126.com")

sleep(5)

driver.switch_to.frame('x-URS-iframe')
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("username")
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_id("dologin").click()

driver.quit()

上面的代碼基本思路就是打開谷歌瀏覽器,進入http://www.126.com強制停止5秒

定位frame,再通過name方式定位eamil,清空email裏面的數據,輸入你的郵箱,同理輸入完密碼

通過id定位登錄按鈕,進行點擊完成登錄。然後就報錯了,一度懷疑是瀏覽器版本和驅動版本不對應的問題,一直在找舊版本的谷歌瀏覽器。(版本對應後還是沒解決)

 

以上就是在教程以及網上搜索的一些解答。普遍的解釋都是剛打開界面,代碼沒加載完整,所以進行sleep(),再定位就可以解決。

 

-----------------------------------------------------------------------------------

 

後面在126郵箱網站上檢查代碼時看到frame的id後面跟着一堆數字。嘗試着用另一種方式(tag_name)定位frame

 

# coding=utf-8

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.126.com")

sleep(3)

fname=driver.find_element_by_tag_name("iframe")
driver.switch_to_frame(fname)
driver.find_element_by_name('email').send_keys("email-name")
driver.find_element_by_name('password').send_keys("password")
driver.find_element_by_id("dologin").click()

終於可以定位到frame,正常輸入郵箱和密碼。不報錯了!!!

 

總結了一下可能的原因

  網上的教程基本是2018年的,在定位126郵箱的frame時id值還是固定的。但是現在的126郵箱首頁的frame中的id值後面帶着一串數字,id值經常會變化,導致在用id定位frame時會報錯。採用tag_name的方式來定位就不會報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章