栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

selenium报错Unable to locate element

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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日使用过并且测试过的方案,以此记录,以防忘记

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934321.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号