背景:
使用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的复制服务,所以基本不太可能出现这种问题
那么如何测试并找出到底是哪个地方存在的问题呢?建议可以用已经测试过的语句替代可能出现问题的地方,看能不能运行,或者每种可能情况都测试一遍,总会找到问题的,毕竟代码的世界都是有因有果的。文章来源:https://www.toymoban.com/news/detail-407001.html
以上,暂时为截止2022年5月30日使用过并且测试过的方案,以此记录,以防忘记文章来源地址https://www.toymoban.com/news/detail-407001.html
到了这里,关于selenium报错Unable to locate element的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!