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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值