紫霄天河 2021-11-12 12:38 采纳率: 33.3%
浏览 144
已结题

python selenium在网页切换刷新时find_element容易崩溃,怎么解决?

python使用selenium要对网页元素进行判断以确定是不是这个网页再决定是否填入数据,要用到find_element_by_name、find_element_by_class_name等函数,但是在我不停地切换与刷新网页的时候,这两个函数就有一定几率会崩溃,请问怎么解决?

 
def isElementExist(browser, element):
    flag = True
    try:
        browser.find_element_by_css_selector(element)
        return flag
    except:
        flag = False
        return flag

main函数中:
   while True:
        time.sleep(0.1)
        title = isElementExist(browser, 'title')
        if title:
            if browser.find_element_by_class_name("title").text == "交易":
                quote = isElementExist(browser, "[name='quote']")
                if quote:
                    code = browser.find_element_by_name("quote").get_attribute("value")
                    if len(code) == 0:
                          #执行逻辑代码

在main函数中的代码如果网页不刷新不切换的时候是毫无问题的,但是业务就是要求网页需要切换与刷新,这个时候find_element_by_class_name与find_element_by_name就容易崩溃,我还需要加入一个什么机制才能在网页刷新的时候找到元素并操作它保证不崩溃吗?

  • 写回答

3条回答 默认 最新

  • 测试开发三木 2021-11-12 13:08
    关注

    关键字 :等待

    等到元素确实出现在页面中,再进行操作

    
    element = WebDriverWait(driver, 10, 0.1).until(
            lambda browser:browser.find_element_by_name("quote")
     )  # 通过 显式等待,确保元素已经就绪,find成功
    
    code = element.get_attribute("value")   #然后再对元素进行操作
    

    以上代码含义:

    1. 在driver中找元素
    2. 如果失败,每0.1秒重试1次
    3. 最多尝试10秒 (约100次)
    4. 如果成功,把元素赋值给elment

    对于题目中的那么多代码,可以使用以下几行代码代替,是不是清爽很多

        my_wait = WebDriverWait(driver, 10, 0.1)   # 定义等待策略,后面会重复用到
        my_wait.until(
            lambda browser: browser.find_element_by_class_name("title").text == "交易"
        )  # 等待 title == 交易,不需要返回值
    
        element = my_wait.until(
            lambda browser: browser.find_element_by_name("quote")
        )  # 定位元素,需要返回值,返回值就是元素本身
    
        code = element.get_attribute("value")  # 获取元素属性
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月13日
  • 已采纳回答 11月13日
  • 创建了问题 11月12日

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊