在网上找了一些教程,试了很久一直会报错
教程里的代码
# 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后面跟着一堆数字。尝试着用另一种方式(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时会报错。采用name的方式来定位就不会报错。