selenium报错Unable to locate element

这篇具有很好参考价值的文章主要介绍了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日使用过并且测试过的方案,以此记录,以防忘记文章来源地址https://www.toymoban.com/news/detail-407001.html

到了这里,关于selenium报错Unable to locate element的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium报Unable to locate or obtain driver for {options.capabilities[‘browserName‘]}

    之前写了一个get_dirver函数,单独运行的时候没问题。后面导入调用的时候也是正常的。 但是后面把这个合入到另一个项目的时候就报Unable to locate or obtain driver for {options.capabilities[‘browserName’]}这个错误。 后面编辑源文件,print了一下函数里面获取的路径,显示不是在当前目

    2024年02月04日
    浏览(60)
  • 解决linux安装yum报错 E: Unable to locate package yum

    参考: 解决linux安装yum报错 E: Unable to locate package yum

    2024年02月04日
    浏览(61)
  • Laravel 使用mix引入本地样式文件 报错 Unable to locate Mix处理

    ✔ Compiled Successfully in 4524ms ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┬

    2024年02月13日
    浏览(38)
  • Ubuntu 20.04安装yum报错:E: Unable to locate package yum

    直接上解决方案! 1、选择自己对应的版本的源地址 注意需要选择跟系统版本一致的:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 找到Ubuntu点击小问号,进去选择对应的版本,将下面的镜像复制到Linux系统的 /etc/apt/sources.list 文件中,将原来的源先备份再全部覆盖。 备份文件 cp 

    2024年01月24日
    浏览(53)
  • Ubuntu20.04、22.04 报错 E: Unable to locate package yum 终极解决方案

    最近装了ubuntu子系统试了好多方法、更换了好多镜像源,但还是无法解决报错 E: Unable to locate package yum   最终通过添加源deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse 成功解决,具体方法如下: 1.备份source.list文件,防止弄坏下载源 2.更换国内源 vim使用说明:

    2023年04月17日
    浏览(54)
  • selenium driver.find_element 报错 invalid argument: invalid locator

    selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator 报错信息:invalid argument: invalid locator 提示的是 定位器 locator 的 参数 argument 是无效的, 为什么无效,是我代码写错了, driver.find_element( \\\'//*[@id=\\\"staffid\\\' ).send_keys(‘handsome’) 定位器 locator 少了最重要的参

    2024年01月25日
    浏览(41)
  • [Selenium]Message: disconnected: Unable to receive message from rendererXXX:报错解决

    selenium.common.exceptions.WebDriverException: Message: disconnected: Unable to receive message from renderer   (failed to check if window was closed: disconnected: not connected to DevTools)   (Session info: MicrosoftEdge=115.0.xxxx.xxx)         示例中使用的是最新版本的 webdriver.EdgeOptions() 创建 edge_options 实例。然后使用

    2024年02月04日
    浏览(44)
  • selenium打开浏览器报错成功解决selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain...

            报错内容为           我将我运行代码同一目录下的msedgedriver.exe没有改名为MicrosoftWebDriver.exe同时我又将python/Scripts目录里面的驱动器改名为MicrosoftWebDriver.exe结果导致了文章开始的报错         我将我运行代码同一目录下的msedgedriver.exe改名为MicrosoftWebDriver.exe这样

    2024年02月10日
    浏览(78)
  • Ubuntu遇到错误: E: Unable to locate package

    对于 Ubuntu 操作系统和 apt-get 包管理器,以下是一些常见的解决方法:行 sudo apt clean 命令可能有助于解决问题。感谢您的指正。 sudo apt clean 命令用于清理本地软件包缓存。当软件包列表或索引出现问题时,清理缓存可以帮助确保您从软件源获取最新的正确数据。 执行以下步

    2024年02月05日
    浏览(42)
  • ERROR in unable to locate ‘***/public/**/*‘ glob

    自己搭了一个react项目的脚手架,npm包下载一切都很正常,启动的时候突然就报 ERROR in unable to locate \\\'***/public/**/*\\\' glob 这个错误,根据百度分析了一下产生的原因:webpack配置文件中的CopyWebpackPlugin导致的 网上给出的解决方案: 上下配置的路径不对,比如说你配置的路径是a/p

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包