Python+selenium自动化元素定位防踩坑

踩坑一:StaleElementReferenceException

  selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

  异常原因:

  意思是,引用的元素已过期。原因是页面刷新了,此时当然找不到之前页面的元素,就算是后退回来的页面也是不一样的。

在编写脚本时一直报这个错,使用显示等待都不行,在一顿百度操作后才知道是元素被刷新了。

 

我们发现,仅仅是刷新了一下页面,两次的element id是不同的,这就说明这是两个不同的元素,如果用之前的element,自然会报错。

  原因很明显,你用别人的身份证id去找现在的人,哪怕这两个人长的很像,他也会告诉你,对不起,你找错人啦。

  解决方法:

  有时我们无法避免,不确定什么时候元素就会被刷新。页面刷新后重新获取元素的思路不变,这时可以使用python的异常处理语句:try…except…,异常出现时重新执行,关键代码如下:

如下图:我在实际工作当中编写脚本时使用异常try捕获异常后,页面刷新后重新获取元素,可以成功找到元素了。

 

踩坑二:ElementClickInterceptedException(元素点击交互异常)

  具体报错:selenium.common.exceptions.ElementClickInterceptedException: Message: element click

  intercepted

   is not clickable at point (1421, 283). Other element would receive the click:

  E (Session info: chrome=104.0.5112.102)

  意思是,元素定位相互覆盖,元素已经找到,但是无法点击

  解决方法:

  方法一:使用强制等待,但是每次都有类似的元素无法点击使用强制等待的话会延长脚本执行时间。

  time.sleep()

  前言:之前便遇到过很多次该问题的报错,就没有管它,但是随着越来越多的元素报该错,每次使用强制等待会大大延长脚本的执行时间,于是便网上找各种方法解决该问题,最终发现是自己使用显示等待的方法错了。

  如下是显示等待的用法和区别。

  方法二:显性等待

  element_to_be_clickable--元素是否可点击。

  vibility of element_ located--元素是否可见。

  presence_of_element_located--元素是否存在。

  如上:三种等待方法,最开始我一直使用的是presence_of_element_located,判断元素是否存在,最终还是报错,提示元素元素点击拦截异常。

  element_to_be_clickable--等待元素出现可以点击,便可以元素定位成功。

  需要先导包:

from selenium.webdriver.support import expected_conditions as EC
  from selenium.webdriver.support.ui import WebDriverWait
element = WebDriverWait(self.browser, 5).until(
      EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='请输入会员手机号']")))
  element.clcik()

  方法三:使用JS点击

  然而有时即使已经显式等待了,却仍然会报错: ElementClickInterceptedException,这多少有点奇怪,为什么 webdriver 有时就是无法点击,我不知道,也许这和他首先执行的一些验证检查有关,反正就在这一刻,它不给你点。

  代码如下:

element = self.browser.find_element(By.XPATH, "(//span[@class='el-checkbox__inner'])[4]")
  self.browser.execute_script("arguments[0].click();", element)

  这是通过 JavaScript 完成的点击,js可以避开一些校验

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值