web自动化异常,selenium.common.exceptions.StaleElementReferenceException(陈旧的元素引用异常)

1.问题描述

selenium自动化代码,报错selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

StaleElementReferenceException是陈旧的元素引用异常
这个异常发生在
    获取元素赋值给变量,再通过变量操作元素,两个步骤之间,若产生了界面刷新
    则会在通过变量操作元素的时候,抛出此异常

再15行前面加一行代码self.driver.refresh()

运行结果:

2.问题解决


解决方案:
    每次操作元素前,实时获取元素赋值给变量
    也就是说,若在获取元素赋值给变量,与通过变量操作元素之间发生了页面刷新
    则在界面刷新后,元素操作前,重新获取元素赋值给变量

解决后的代码(将元素定位封装在一个函数中,并return该元素,想用该元素时,直接调用该函数即可;这样的话元素赋值与操作元素之间就不会产生界面刷新了)

from selenium import webdriver
class loginPage:
    def __init__(self, url):
        # 创建浏览器驱动对象,这里是打开浏览器
        self.driver = webdriver.Chrome("E:\愤怒吧小鸟\chromedriver-win64\chromedriver.exe")
        # 访问网址
        self.driver.get(url)

    # 用户名输入框
    def user_name_input_box(self):
        return self.driver.find_element_by_name("username")
    # 密码输入框
    def password_input_box(self):
        return self.driver.find_element_by_name("password")

    # 登录按钮
    def login_button_box(self):
        return self.driver.find_element_by_css_selector("button")

    def logn(self):
        self.driver.refresh()
        self.user_name_input_box().send_keys("libai")  #封装成方法,元素赋值和操作元素中间就不会有界面刷新了
        self.password_input_box().send_keys("opmsopms123")
        self.login_button_box().click()
LP = loginPage("http://127.0.0.1:8088/")
LP.logn()

注意:有问题的代码和修复后的代码可在资源绑定中自行下载,如有问题可在评论区留言

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿里嘎多f

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值