首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Selenium WebDriver找不到元素的三种情况

今天抽点时间总结下Selenium WebDriver找不到元素的情况。 当然这里说的是css或者XPath都没写错,定位准确,也并非使用了不稳定的定位语句。...在当前页面找不到这个元素了,但是你自己手动复制到页面开发者工具上查看明明有啊,为啥在代码里面就找不到了呢?...其实呢是在操作的过程中页面发生了变化,刷新了,虽然表面上看起来两个元素长得一模一样,事实上是每一个元素都有自己的一个ID号。 用代码(Python)来证明!...比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。...解决: 只要刷新页面之后重新获取元素就行,不要提前获取一组元素,然后去循环操作每一个元素,这种情况还是获取元素的个数,然后在循环中获取相应位置的元素,在用的时候才去获取,这样你就获取到最新的id了,也不会出现找错人的尴尬了

5.3K50

JavaScript 获取鼠标及元素在页面上的位置

在书写一些“拖拽”页面交互效果,比如常见的拖拽效果、自定滚动条、放大镜等效果,都需要用到了鼠标或元素在页面上的位置信息。...另外,也要跟大家分享一个方法,它能快速的获取元素在页面上的位置信息,不同于之前学过的offsetLeft等属性,它就是——getBoundingClientRect()方法 回顾clientX/Y获取鼠标位置的方式...layerX/Y属性有点坑,如果想让鼠标的位置参考的是自身元素的左上角,需要给自身元素设置position(属性值不能是static | inherit),否则默认参考document文档区域的左上角。...等属性来获取元素的尺寸、位置等信息,想具体了解的可以回复“元素信息”到HTML5学堂公众号。...今天要给大家分享的是另外一种快速获取元素在页面上的位置,赶紧尝试书写一下下面的实例 代码实例: <!

3.4K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CSS篇(005)-在页面上隐藏元素的方法有哪些?

    -(2)使用 visibility:hidden;隐藏元素。元素在页面中仍占据空间,但是不会响应绑定的监听事件。 -(3)使用 opacity:0;将元素的透明度设置为 0,以此来实现元素的隐藏。...元素在页面中仍然占据空间,并且能够响应元素绑定的监听事件。 -(4)通过使用绝对定位将元素移除可视区域内,以此来实现元素的隐藏。...-(5)通过 z-index 负值,来使其他元素遮盖住该元素,以此来实现隐藏。...-(6)通过 clip/clip-path 元素裁剪的方法来实现元素的隐藏,这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。...-(7)通过 transform:scale(0,0)来将元素缩放为 0,以此来实现元素的隐藏。这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。

    62110

    selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)

    原因就在这里:你点击第二个时已经是新页面,当然找不到之前页面的元素。这时,他会问“可是明明元素就在那里,没有变,甚至我是回退回来的,页面都没有变,怎么会说是新页面?”。...页面,甚至页面上的元素都是有自己的身份证号(id)的。...比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。...很简单: 只要刷新页面之后重新获取元素就行,不要提前获取一组元素,然后去循环操作每一个元素,这种情况还是获取元素的个数,然后在循环中获取相应位置的元素,在用的时候才去获取,这样你就获取到最新的id了,也不会出现找错人的尴尬了...总之一句话,遇到页面有变化的情况,不要去循环元素,去循环个数或者定位方式,在循环中获取元素。

    1.2K10

    appium+python自动化42-微信公众号webview操作

    前言 上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因, 此处埋了一个深坑...driver.contexts) driver.switch_to.context('WEBVIEW_com.tencent.mm:tools') 切换handle 1.切换到webview上后,发现死活定位不到页面上的元素...,打印page_source也找不到页面上的元素,最后打印当前的所以handle发现有两个 ?...26a32ac3a0fa’, ‘CDwindow-fdadc56e-eb01-4575-927e-74966e64c082’] 操作webview 1.操作目标:点击webview上的“app”这个选项,然后定位列表页内容...2.继续操作webview上的元素定位,这里的元素定位跟selenium的元素定位一样了 ? 3.定位app列表页,并且打印列表的内容 ?

    1.6K10

    .NET(C#)无头爬虫Selenium系列(02):等待机制

    ,则通知你 如果找不到,下一秒继续 如果超过10秒都找不到,通知你 Selenium 的等待机制同样如此,而上述机制中唯一可以变化的就是"查找规则",这体现为 Wait.Until 的第一个参数接受一个...---- FindElements 无法等待的原因 这次项目自带 web 服务,启动调试会先启动 web 服务,在浏览器中输入本机 ip 即可浏览本文案例网页,操作看视频: vs 启动调试后,打开浏览器页...,输入 "localhost:8081" 出现页面 点击页面上的按钮,下方出现新文本 ---- 用"开发者工具",查看元素的标签: 可以看到,新增的内容都是由一个 div 标签包围,他们的共同特征是...这里的根本问题在于,wd.FindElements 在页面上找不到任何符合条件的元素,但是 wait 对象却没有重复查找 这是因为,wait 对象中的逻辑是,委托中的调用返回 null 或有异常,才被识别为继续等待...不过在 .net 中可以很容易扩展自己的语义。

    2.5K40

    如何使用Selenium WebDriver查找错误的链接?

    您可以使用Selenium WebDriver来利用自动化进行錯誤的链接测试,而无需进行人工检查。 ? 当特定链接断开并且访问者登陆页面时,它将影响该页面的功能并导致不良的用户体验。...在Selenium WebDriver教程系列的这一部分中,我们将深入研究如何使用Selenium WebDriver查找断开的链接。...404页面不存在) 资源(或页面)在服务器上不可用。 408(请求超时) 服务器已超时等待请求。客户端(即浏览器)可以在服务器准备等待的时间内发送相同的请求。...410(已去) HTTP状态代码比404(找不到页面)更永久。410表示该页面已消失。该页面在服务器上不可用,也未设置任何转发(或重定向)机制。指向410页的链接将访问者发送到无效资源。...在本Selenium WebDriver教程中,我们将演示如何使用Selenium WebDriver在Python,Java,C#和PHP中执行断开的链接测试。

    6.7K10

    Python无头爬虫Selenium系列(02):等待机制

    ---- 机制 想象一下如果是一个机器人帮你从网页上查找某个信息,比较合理的流程是: 让机器人每隔1秒到页面上"按规则"找一下 如果找到,则通知你 如果找不到,下一秒继续 如果超过10秒都找不到,通知你...启动网站服务如下(jupyter notebook 为例子): 打开 web_run.ipynb 文件 执行第一个 cell 的代码,直到下方出现"serving at port 8081" 打开浏览器页,...用"开发者工具",查看元素的标签: 每个新增的内容为一个 div 标签,属性 class 都是 "content" 现在用代码控制 Selenium ,找上述的 div 标签。...,此时我们可以在"下级函数"中使用"上级函数"的参数 css_selector 。...此方法不管是否找到元素,都会返回一个列表(没有找到则为空列表) 行4,5:一旦找到的数量高于等于指定数量,则把找到的列表返回即可。

    1.3K20

    当selenium爬虫遇到弹窗——iframe定位

    目录 问题描述 原因分析 解决方案 总结 问题描述 如上图所示,为某数据网站,自动登录时,点击登录button会出现弹窗让你输入账号密码,此时定位输入框send_keys发送参数,报错信息如下:找不到元素...下再对页面元素进行操作(大致可以理解为页中页,及一个页面里嵌套了一个页面,而selenium的操作网页的原理是依靠窗口句柄,当前句柄在外面窗口,定位元素在内部窗口,所以无法定位到元素。...关于selenium的句柄切换详见下一篇文章,还没写!后面整理下再写,跟本次所要讲的切换类似又有点儿差异,有兴趣的可以百度一下,有前辈们贡献过!...#跳出iframe drive.switch_to_default_content() #如果不跳出再次进入iframe也会报错,找不到元素,相当于在iframe里找一个iframe 如果driver.switch_to_frame...版本:3.141.0;chrome版本:76.0.3809,两种写法都可以】 总结 #定位iframe #也可以用其他属下定位同selenium常用定位方法,即iframe本身也是一个元素 iframe

    1K10

    Selenium自动化测试秘籍:解锁常用函数实战指南

    1.元素的定位 获取页面单个元素,使用find_element 获取页面多个元素,使用find_elements 实战:获取百度首页中所有热搜的内容 发现当前元素存在6个,在页面中CTRL+F进行查询即可...=关闭浏览器,因此在执行driver。close()之后仍然还需要调用driver.quit()! 5.弹窗 弹窗是在页面是找不到任何元素的,这种情况怎么处理?...使用selenium提供的Alert接口 处理一般步骤: 切换到弹窗 关闭弹窗(点击确定/取消) 5.1.警告弹窗+确认弹窗 页面上定位不到弹窗元素 出现了弹窗,页面其他元素也无法定位 即页面出现了弹窗...脚本的执行速度非常快,而页面要加载的资源比较多,因此当脚本执行到改行代码时页面还没有渲染完成,因此找不到该元素,当添加了time.sleep(3)之后,页面已经在3秒内加载完成,此时再去查找该元素就可以找到...若等待指定秒数后还是查找不到元素,就会报错 6.3.显示等待 显示等待也是⼀种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码 WebDriverWait(driver,sec)

    8610

    Selenium——控制你的浏览器帮你爬虫

    问题:获取当前页好办,怎么获取接下来页面的内容? 带着这个思考,Selenium神器走入了我的视线。 预备知识 Selenium简介 Selenium是什么?一句话,自动化测试工具。...但是有一点需要注意,就是在点击的时候,元素不能有遮挡。什么意思?就是说我在点击这个按键之前,窗口最好移动到那里,因为如果这个按键被其他元素遮挡,click()就触发异常。...下面是相对路径的引用写法: 查找页面根元素:// 查找页面上所有的input元素://input 查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示...[1]//input 查找页面上第一个form元素://form[1] 查找页面上id为loginForm的form元素://form[@id='loginForm'] 查找页面上具有name属性为username...然后找到下一页元素的位置,然后根据下一页元素的位置,触发鼠标左键单击事件。 我们审查元素看一下,这两个元素: ? ?

    2.2K20

    selenium 之百度搜索,结果列表翻页查询

    selenium之百度搜索,结果列表翻页查询 by:授客 QQ:1033553122 实例:百度搜索,结果列表翻页查询 解决问题:解决selenium driver获取web页面元素时,元素过期问题 思路...1:获取所有“页面翻页链接”元素,然后遍历元素并点击 # -*- coding: utf-8 -*- from selenium import webdriver import time if __name...cache - perhaps the page has changed since it was looked up' ; Stacktrace: 即在cache中找不到元素,可能是在元素被找到之后页面变换了...'+str(page_num)+')') one_page.click() #备注以下小段代码描述了页面变化规律,这个得自己去研究 if not has_pre_page: #点击第2页时会出现上一页...selenium')#测试数据 selenium zhidashso dld#selenium zhidashso dldld driver.find_element_by_id('su1').click

    1.3K20

    Python3网络爬虫(九):使用Selenium爬取百度文库word文章

    问题:获取当前页的内容好办,怎么获取接下来页面的内容?     带着这个思考,Selenium神器走入了我的视线。...但是有一点需要注意,就是在点击的时候,元素不能有遮挡。什么意思?就是说我在点击这个按键之前,窗口最好移动到那里,因为如果这个按键被其他元素遮挡,click()就触发异常。...3.2 Xpath     这个方法是非常强大的元素查找方式,使用这种方法几乎可以定位到页面上的任意元素。在正式开始使用XPath进行定位前,我们先了解下什么是XPath。...下面是相对路径的引用写法: 查找页面根元素:// 查找页面上所有的input元素://input 查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示...然后找到下一页元素的位置,然后根据下一页元素的位置,触发鼠标左键单击事件。     我们审查元素看一下,这两个元素: ? ?

    3.4K61

    WEB-UI自动化实践

    3.2.1 接口优化 直接调用 selenium 的接口经常会遇到些令人头疼的问题,比如网络问题使页面 loading 太慢,需要操作的元素还没展示出来,这种情况就会经常报元素找不到的 error,导致用例执行失败...页面上的元素都可以用 xpath 来描述;缺点,不稳定,大量使用会给用例维护产生很大的负担。...xpath 一般只要前端在页面上做一下小调整,用例就必须重新维护,在不得不使用 xpath 的情况下,为了减少今后的维护量,可对 xpath 做一些优化,可以减少 xpath 的路径长度提高稳定性。...1.某些页面弹窗,有时候定位不到弹窗元素。理论上 selenium 在一个页面中查找一个元素是可以定位到,但有些时候出现弹窗,此时就需要在重新定位弹窗。解决方法: ?...有一种元素能在页面上正常展示,但对于工具来说它是不可见的,这是因为在一般情况下,元素可见需要满足以下几个条件:visibility!=hidden ; display!=none; opacity!

    1.7K20

    Selenium Python使用技巧(三)

    书接上文和上上文: Selenium Python使用技巧(一) Selenium Python使用技巧(二) 处理不同情况的等待 在Selenium自动化测试中网页可能需要花费一些时间来加载,或者希望在触发测试代码之前可以看到页面上的特定...Selenium具有WebDriverWait,可以将其应用于任何具有条件和持续时间的Web元素。如果不存在执行等待的元素或发生超时,则可能引发异常。...在下面的示例中,我们等待link_text=Sitemap加载到页面上,并在WebDriverWait方法中指定了超时。如果在超时时间内未加载该元素,则抛出异常。...driver.quit() 网页中的滚动操作 在使用Selenium执行测试自动化时,您可能需要在页面上执行上滚/下滚操作的要求。...使用Selenium放大和缩小 为了在进行Selenium自动化测试时放大或缩小,应使用transformCSS属性(适用于相应的浏览器),该属性可让您在页面上执行放大,缩小,旋转,倾斜等操作。

    1.7K30

    Clicknium:更强大的自动化工具,可用于爬取抖音动态网页数据

    Clicknium的特点是支持多种浏览器,提供了多种元素定位和操作方法,方便请求和响应处理。...与Selenium相比,Clicknium具有以下优势: 支持多种浏览器,包括Chrome、Firefox、Edge和IE等,Selenium只支持Chrome和Firefox3。...提供内置的录制器,可自动生成选择器,而Selenium需要手动编写XPath或CSS选择器定位元素。 支持桌面应用自动化,能够无缝连接Web和桌面应用,而Selenium只能自动化Web应用。...支持图像识别定位控件,有效弥补基于元素控件特征定位的缺陷,Selenium不支持此功能。...=session) # 打开抖音网页版首页 browser.open("https://www.douyin.com/") # 等待页面加载完成 browser.wait(10) # 获取当前页面上的所有视频链接元素

    2.8K31

    《手把手带你学爬虫──初级篇》第5课 Selenium WebDriver的用法

    (session="bb336a8045d9536ef7b79e16d5a78637", element="0.6577164491799441-1")> 注意:使用xpath来进行寻找页面元素,如果页面上有多个元素和...In [67]: ele_next = browser.find_element_by_class_name('n') # 点击下一页元素 In [68]: ele_next.click() # 再次点击下一页元素...('n') # 点击元素,我们发现竟然回到了第一页,那是因为,当前页非第1页时,页面上出现了上一页元素,class属性值也为n,因此,这时得到的元素为上一页元素 In [71]: ele_next.click...点击下一页元素 In [75]: ele_next.click() # 再次获取下一页元素 In [77]: ele_next = browser.find_elements_by_class_name...举个例子,如果页面上有n个元素的class都是’column-md-3’,那么只要有1个元素存在,这个方法就返回True text_to_be_present_in_element 判断某个元素中的text

    2.7K32

    UI自动化问题汇总

    你在自动化工作中,遇到了什么问题 答: 主要有以下几点: 频繁地变更UI,经常要修改页面对象里面代码 运行用例报错和处理,例如元素不可见,元素找不到这样异常 测试脚本复用,尽可能多代码复用 一些新框架产生的页面元素定位问题...什么是页面加载超时 答: Selenium中有一个 Page Load wait的方法,有时候,我们执行脚本的速度太快,但是网页程序还有一部分页面没有完全加载出来,就会遇到元素不可见或者元素找不到的异常...Selenium中如何实现拖拽滚动条 答: 在Selenium中通过元素定位会自动帮你拖拽到对应位置,所以是没有自带的scoll方法。...但是这个是有限制,例如当前页面高度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会报元素不可见的异常。我们就需要利用javaScript来实现拖拽页面滚动条。...如何判断一个页面上元素是否存在 答: 这个可以说是被问烂的题了,判断元素存在方法有三种: 方法一,用try...except...

    3.5K61
    领券