python+selenium 126邮箱定位frame一直报错原因

在网上找了一些教程,试了很久一直会报错

教程里的代码

# 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的方式来定位就不会报错。

猜你喜欢

转载自blog.csdn.net/qq_41024101/article/details/88814957
今日推荐