​selenium中元素定位正确但是操作失败,6种解决办法全稿定

这篇具有很好参考价值的文章主要介绍了​selenium中元素定位正确但是操作失败,6种解决办法全稿定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

selenium中元素定位正确但是操作失败的原因无外乎以下4种:

一、页面没加载好

解决方法:添加等待方法,如: time.sleep()

二、页面提交需要等待给数据后台

解决方法:添加等待方法,如: time.sleep()

三、浏览器没有以最大化方式打开,导致元素被隐藏,定位不到

解决方法:
将网页最大化:driver.maximize_window()
如果屏幕比例固定,分辨率有限,通过网页最大化也没办法解决的话,可以通过执行JS方法来实现。

browser.execute_script(‘window.scrollBy(200,0)’) #此处(200,0)为网页偏移坐标,200为横坐标,0为纵坐标
#window.scrollBy()为JS方法#

四、网页中存在多个frame框架,所定位的元素不在当前frame中。所以尽管元素明明看起来是定位正确的,但是点击无效。

frame框架作用:frame对象代表一个HTML框架,frame就是一个子窗口,在里面可以加载网页,内部子窗口进行刷新的时候,不会影响外部窗口。

对于嵌套多个frame的页面,操作时需要层层跳转,跳到元素所在的frame。

frame标签有frameset、frame、iframe三种,frameset与其他普通标签一样,不会影响元素的定位;而frame与iframe的切换方法是一样的。

frame 下是个独立的HTML文件:
​selenium中元素定位正确但是操作失败,6种解决办法全稿定
解决方法:可以利用selenium中的switch_to.frame()方法来实现frame之间的跳转。

具体操作如下:

1.如何对frame进行切换?

利用switch_to.frame()方法来进行切换。

switch_to.frame(reference)

reference是传入的参数,用来定位frame,可以是id,name,tag name等。假设有下面HTML代码:

<html lang="en">
<head>
    <title>FrameTest</title>
</head>
<body>
<iframe src="myframe.html" id="frame1" name="myframe"></iframe>
</body>
</html>

则想要切换到上述iframe的方法有:

driver.switch_to.frame(0)  #用frame的index定位,第一个是0
driver.switch_to.frame("frame1")  #用frame的id来定位
driver.switch_to.frame("myframe") #用name来定位
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  #用iframe对应的tag name来定位
driver.switch_to_frame(driver.find_element_by_xpath("//iframe[contains(@src,'myframe')]"))  #利用xpath来定位

2.如何从子frame切换回主文档?
切换到子frame后就无法再对主文档元素进行操作了,所以要切换回主文档。方法为:driver.switch_to.default_content()

driver.switch_to.default_content()

3.多层frame如何切换?
如果有多层frame要逐层进行切换,例如下列多个frame嵌套的HTML代码:

<html>
    <iframe id="frame1">
        <iframe id="frame2" / >
    </iframe>
</html>

(1)从主文档切换到frame 2:

driver.switch_to.frame(‘frame1’) #先从主文档切换到frame1
driver.switch_to.frame(‘frame2’) #再从frame1切换到frame2

(2)从frame2切回到frame1:
从frame2再切回frame1,这里selenium给我们提供了一个方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。

driver.switch_to.parent_frame()  # 如果当前已是主文档,则无效果

有了parent_frame()这个相当于后退的方法,我们可以随意切换不同的frame,随意的跳来跳去了。
总结下,遇到frame跳转问题,利用以下三个方法便可以搞定:

driver.switch_to.frame(reference)
driver.switch_to.parent_frame()
driver.switch_to.default_content()

五、元素属性为动态属性,看着定位已经正确,但是随着鼠标点击位置不同,元素的属性发生变化。
例如下面这个页面的目录的class属性就随着该元素是否被点击而发生变化:

解决方法:换元素的另一个固定属性来进行定位。
​selenium中元素定位正确但是操作失败,6种解决办法全稿定
六、页面元素在页面打开的时候被其他弹出窗口挡住。

解决方法:添加关闭弹出窗口步骤。

房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。

领取关 w/x/g/z/h:软件测试小dao

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。文章来源地址https://www.toymoban.com/news/detail-421136.html

到了这里,关于​selenium中元素定位正确但是操作失败,6种解决办法全稿定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 关于微信小程序调用H5腾讯地图API获取定位信息提示失败问题--解决办法之一

    在跳转到H5页面加载腾讯地图API获取定位信息时,“真机调试”、“开发模式”都可以使用 web-view 组件访问我需要的路径。只有“体验版”、“线上版本”会出现这个错误提示。正常加载都是正常的,但是因为腾讯地图API在获取定位信息的同时,会在页面上内嵌一个隐藏的

    2024年04月26日
    浏览(43)
  • selenium点击元素失败:</a> is not clickable at point解决办法

    代码: 报错:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element … is not clickable at point (871, 546)… 元素单击捕获的异常,字面意思说这个元素不支持单击。 尝试使用下面方式有效:

    2024年02月02日
    浏览(54)
  • 电脑出现操作失败,错误为0x0000011b的解决办法

    在使用电脑时,会遇到出现操作失败,错误为0x0000011b的情况,大部分出现这样的情况,如果电脑与打印机连接就会导致打印机无法使用,那么想要计算机的功能能够正常操作就需要解决这个问题,接下来就教大家如何去解决操作失败,错误为0x0000011b的办法。 方法一:更新电脑

    2024年02月06日
    浏览(44)
  • selenium 使用chrome_driver自动化操作Google浏览器,调试的时候没有提示,但是编译后就提示一些错误的解决方法

    使用chrome_driver自动化操作Google浏览器,调试的时候没有提示,但是编译后就提示一些错误的解决方法: 1、提示  ERROR:ssl_client_socket_impl.cc(975)] handshake failed; returned -1, SSL error code 1, net_error -101: 添加: 2、提示  USB: usb_device_win.cc:95 Failed to read descriptors from \\\\?usb#vid_0e8dpid_201d

    2024年02月04日
    浏览(37)
  • selenium对于页面改变的定位元素处理办法

    在学习selenimu中,总是发现元素定位不到,想了各种办法,最后总结大致有两个原因。 1.等待时间不够,页面还没有完全渲染就进行操作,使用time模块进行等待。 2.换了页面后,发现定位不到元素,因为浏览器还停留在最开始的页面,处理办法,加一行代码。 运行结果: 缺

    2024年02月01日
    浏览(34)
  • Python爬虫(7)selenium3种弹窗定位后点击操作,解决点击登录被隐藏iframe无法点击的登陆问题

    之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览器 Python爬虫(3)-Selenium结合pywin32模拟键盘操作 Python爬虫(4)-Seleni

    2024年02月04日
    浏览(34)
  • 配置正确但是 Aria2 RPC 服务器错误解决方案 2023

    适用于 Windows 系统 (Linux/MacOS 也不会遇到这些问题吧……) 检查 hosts 文件中是否为 127.0.0.1 设置别名 localhost (可将 Aria2 JSON-RPC 地址的 localhost 改为 127.0.0.1 看是否可行) 检查端口号是否对应正确(默认 6800 ) 检查 Aria2 是否正常启动(查看 aria2c log,把 ERROR 处理掉) Aria2

    2024年02月12日
    浏览(27)
  • 解决Git Clone失败,浏览器可以访问github项目,但是git clone失败

    记录一次git clone github上的项目,浏览器可以访问,但是git clone失败的处理过程 一,确认是否能ping通 如果不能ping通,先处理ping问题,详见如下链接 Github无法ping通的解决策略 二,clone项目(第4步才成功) 1,git clone https://… 2,改https为git,git clone git://… 3,重置 http.proxy 4,设置

    2024年01月23日
    浏览(51)
  • selenium【元素定位与操作】

    定位元素 [@属性=‘属性值’] [@属性] [tag] [text()=‘文本’] 返回的是元素两个间的文本 [contains(text(),“元素两个间的部分文本”)] [contains(@属性名,“部分属性值”)] 定位下拉列表的某个选项:driver.find_element(By.XPATH,‘//option[text()=“联想”]’) driver.find_element(By.XPATH,‘//o

    2024年04月18日
    浏览(45)
  • selenium元素定位与操作

    说明:本篇博客基于selenium 4.1.0 在selenium中,想要对元素进行操作,一般需要如下步骤: 在浏览器中查看元素属性,便于selenium在页面中找到该元素 在代码中创建元素对象 元素操作、获取元素信息 方法1:右键-检查 方法2:设置-更多工具-开发者模式 方法3:默认快捷键F12 出

    2024年02月15日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包