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

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 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM