紫霄天河 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日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助