【问题标题】:Waiting for elements to become interactible reliably等待元素变得可靠交互
【发布时间】:2022-11-10 23:36:08
【问题描述】:

我是一个菜鸟,并试图在某个网站上自动填写一些在线表格。我的问题是某些按钮在单击它们之前需要一些时间,否则它们不起作用(但没有错误!,执行继续)。
到目前为止,我唯一的解决方案是在这些按钮之前添加一个time.sleep(6),但这并不理想。
我正在努力寻找更好的解决方案。

到目前为止,我有这个功能:

def Send_Click_dk(bywhat,what):
    WebDriverWait(browser, 10).until(EC.presence_of_element_located((bywhat,what)))
    WebDriverWait(browser, 10).until(EC.visibility_of(browser.find_element(bywhat, what)))
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable(browser.find_element(bywhat, what)))
    browser.find_element(bywhat, what).click()

Send_Click_dk(By.NAME, "mainpanel_parentSection_1b0a0b")

首先,这是一个好方法吗?我是不是误会了什么? 其次,如果这是正确的方法,在单击按钮之前我还能检查什么?到目前为止,所有这些检查都立即通过并且.click() 被执行但没有产生预期的结果。只有添加 time.sleep(6) 才能按预期工作。

这是页面特定部分的快照,我无法复制原始文本。

第一个标记的按钮显示第二个标记的按钮。但是,如果没有time.sleep(x),它只会保持关闭状态而不会显示第二个。 非常感谢您的帮助!干杯!

【问题讨论】:

    标签: python selenium selenium-webdriver webdriverwait expected-condition


    【解决方案1】:

    您绝对可以将所有代码简化为一行

    def Send_Click_dk(bywhat,what):    
        WebDriverWait(browser, 10).until(EC.element_to_be_clickable(browser.find_element(bywhat, what))).click()
    
    Send_Click_dk(By.NAME, "mainpanel_parentSection_1b0a0b")
    

    visibility_of 预期条件包括 presence_of_element_located 因为元素不存在就无法可见。
    element_to_be_clickable 内部包含 visibility_of
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable(browser.find_element(bywhat, what))) 也返回 web element 对象,所以你可以直接点击它。
    此外,请确保 mainpanel_parentSection_1b0a0b 名称属性是一个固定值。 1b0a0b 后缀好像是动态生成的

    【讨论】:

    • 谢谢你!非常有用的信息,但主要问题是即使 .click() 方法成功执行,某些按钮也不会被点击。对此有任何想法吗?
    • 这可能是由几个问题引起的,例如您尝试单击的元素实际上不可单击。即您可以单击它,但这将无济于事。我们需要查看您的所有代码,包括您正在处理的页面以提供更具体的答案
    • 如果有帮助,请添加页面图片。允许这样的照片吗?
    猜你喜欢
    • 2019-10-21
    • 2017-08-07
    • 1970-01-01
    • 2020-03-26
    • 2022-01-22
    • 2021-10-20
    • 2022-11-28
    • 2021-08-02
    相关资源
    最近更新 更多