使用selenium登录126邮箱定位失败原因

在使用selenium尝试登录126邮箱时遇到定位元素失败的问题,原因包括动态id、复合类名以及frame的存在。解决方法包括:等待页面加载、切换到iframe、使用css选择器进行定位。通过导入time模块进行延时,然后切换到id为"x-URS-iframe"的iframe,最后使用css选择器成功定位并输入用户名、密码和点击登录。
摘要由CSDN通过智能技术生成

刚开始入手学习selenium登陆126邮箱愣是运行不成功,总是提醒定位失败,不管是用id,还是classname,还是classpath等等,都是一样的效果。然后就百度。搜到了答案

使用id定位

 Message: no such element: Unable to locate element: {"method":"id","selector":"auto-id-1537235284167"},找不到元素。原因是由于此id是动态id,每次刷新http://www.126.com页面该值都会变话。因此找不到对应元素。

使用类定位

原因是:该class是含有空格的复合类。无法直接使用find_element_by_class_name()方法查询。

还是提示找不到元素,原因是:由于定位元素仅会在当前所处的frame中寻找该元素,如果有多个frame时需要先切换到对应的frame下才能够找到该元素。仔细查看页面信息,找到到id为x-URS-iframe的iframe。

如果未加载完毕,依旧定位不到元素所在的frame。所以此时需要加一个延时操作,time.sleep()。使用time的时候需要import time模块。

然后就可以正常运行成功了

import time

 

driver = webdriver.Chrome()

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

 

time.sleep(2)

driver.switch_to.frame("x-URS-iframe")

# 定位到对应的frame

 

driver.find_element_by_css_selector(".dlemail").clear()

# 单个属性

 

driver.find_element_by_css_selector("[class='j-inputtext dlemail']").send_keys("user")

# 直接包含空格的CSS属性定位

 

driver.find_element_by_css_selector(".j-inputtext.dlpwd").clear()

# css定位双属性

 

driver.find_element_by_css_selector(".dlpwd").send_keys("pwd")

# css定位单属性

driver.find_element_by_css_selector(".loginbox").click()

 

如果没有id

1.需要先定位iframe,使用任何定位方法均可

2.这里就是用tagname定位了

iframe =driver.find_element_by_tag_name("iframe")

3.定位之后切换即可 

driver.switch_to_frame(iframe)

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值