selenium报错Unable to locate element

背景:

使用selenium写自动化脚本时,在登录后的新界面进行点击一直报错

内容如下:

driver.find_element_by_xpath('//*[@id="15227789891964323"]/a[1]').click()

报错如下:

NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="15227789891964323"]/a[1]"}
  (Session info: chrome=76.0.3809.87)

解决方案:

查找各方资料后,有几种情况会造成报错,以下为解决方案:

1、定位的页面重新开了一个iframe,需要切换iframe,语句如下:

driver.switch_to.window(driver.window_handles[-1])

或者如下语句:

# 当前打开的所有窗口
windows = driver.window_handles
# 转换到最新打开的窗口
driver.switch_to.window(windows[-1])

或者如下语句:

sreach_window=driver.current_window_handle

2、时间过短、操作时间过快,页面还未加载完,需要加一个延时

# 延时加载
sleep(5)

3、定位的元素是动态的,相对值不断变化,主要表现可能为一串数据,或是字符加数据,页面加载一次变化一次,每次都不相同。

其他博主提供的方案:尽量避免用这样的属性值去定位,而采用这个元素下的其他固定不变的属性值。或是向上层查找,采用Xpath定位

4、定位页面嵌入式元素,笔者就是在排除了多种情况、尝试了多种方法后,确定可能是出现了这个问题,并在查阅其他博主的文章后,确定了如下解决方案:

#从frame中先切回主文档
driver.switch_to.default_content()
#进入第一层frame
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="body"]/iframe'))
#操作第一层iframe下的元素,点击元素
driver.find_element_by_xpath('//*[@id="sortable"]/li[4]').click()

关键在与找到并进入第一层,因为是嵌套,所以需要一步一步的进入页面,从最外层向最里层,层层定位

来源于:https://www.cnblogs.com/pxj2018/p/9883721.html

5、出现Xpath编写错误,但是目前chrome和firefox均提供xpath的复制服务,所以基本不太可能出现这种问题

那么如何测试并找出到底是哪个地方存在的问题呢?建议可以用已经测试过的语句替代可能出现问题的地方,看能不能运行,或者每种可能情况都测试一遍,总会找到问题的,毕竟代码的世界都是有因有果的。

以上,暂时为截止2022年5月30日使用过并且测试过的方案,以此记录,以防忘记

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值