selenium报错Unable to locate element

在使用selenium进行自动化脚本测试时遇到'Unable to locate element'的错误。该问题可能由iframe未切换、页面加载过快、动态元素、嵌套元素定位不准确以及Xpath错误等引起。解决方案包括切换iframe、增加延迟、使用稳定属性定位、逐层定位嵌套元素以及检查Xpath的正确性。通过替换和测试可疑代码段可以定位问题原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值