在網上找了一些教程,試了很久一直會報錯
教程裏的代碼
# 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的方式來定位就不會報錯。