当前位置: 首页 > 面试题库 >

python selenium:在单击click()命令后不等待页面加载

壤驷华美
2023-03-14
问题内容

有人知道如何等待页面加载吗?我尝试了在网上找到的所有可能的变体,但根本无法正常工作。

触发click()命令后,我需要等待,Web服务器上存在一些内部脚本,这些脚本会愚弄检查,例如(我排除了导入所需模块并使用标准命名约定的代码):

WebDriverWait(browser, 10).until(lambda d: d.find_element_by_id(the_id))

要么

browser.implicitly_wait(10)

要么

elem2=wait.until(EC.presence_of_element_located((By.ID,the_id)))

上述所有检查均无效,从某种意义上来说,即使页面仍在加载中,它们也会返回True。这会导致我正在阅读的文本不完整,因为click()命令后页面未完全加载。似乎在python中,命令
clickAndWait
不可用(但同样,由于其他测试也失败了,它可能无法解决问题)。理想情况下,将有一条命令等待直到整个网页加载完毕(无论页面的特定元素如何)。

我设法通过在循环中手动插入time.sleep(5)来解决了这个问题,但这不是很理想,因为这可能会减慢整个过程。如果可能,最好只等待严格要求的时间。

谢谢


问题答案:

从根本上讲,如果页面是由JavaScript生成的,则无法得知页面何时“完成”加载。

然而。我通常尝试检索页面元素,捕获异常并继续尝试直到达到超时。我可能还会检查该元素是否可见,而不仅仅是存在。

必须有一些DOM元素,其可见性可用于测试页面“完成”加载。我的测试用例中通常有一个wait_for_element_visibilitywait_for_element_presence函数。

def wait_for_visibility(self, selector, timeout_seconds=10):
    retries = timeout_seconds
    while retries:
        try:
            element = self.get_via_css(selector)
            if element.is_displayed():
                return element
        except (exceptions.NoSuchElementException,
                exceptions.StaleElementReferenceException):
            if retries <= 0:
                raise
            else:
                pass

        retries = retries - 1
        time.sleep(pause_interval)
    raise exceptions.ElementNotVisibleException(
        "Element %s not visible despite waiting for %s seconds" % (
            selector, timeout_seconds)
    )

get_via_css 是我自己的功能之一,但我希望它很清楚自己在做什么。



 类似资料:
  • 有人知道怎么等到页面加载吗?我尝试了我在网上找到的所有可能的变体,但就是不起作用。 在我触发click()命令后,我需要等待,Web服务器上有一些内部脚本可以欺骗检查,例如(我排除了导入所需模块并使用标准命名约定的代码): 或 或 以上所有检查都不起作用,因为即使页面仍在加载,它们也会返回True。这导致我正在阅读的文本不完整,因为在单击()命令后页面没有完全加载。似乎在python中clickA

  • 当我运行以下代码时,执行会突然结束,除非我取消对Thread.sleep()的注释。因此,我在撤回url servlet中的代码不会被执行。单击是一个提交按钮单击,加载另一个页面。 让硒等到页面加载的正确方法是什么? 我正在使用以下selenium版本

  • 我想在点击后获取页面的页面源。然后使用browser.back()函数返回。但是Selenium不会让页面在点击后完全加载,并且由JavaScript生成的内容不包含在该页面的页面源中。

  • 我正在尝试使用selenium/python从印度中央污染控制委员会读取数据表。这是一个输出示例。我基本上遵循此处介绍的方法:https://github.com/RachitKamdar/Python-Scraper. 多亏了@Prophet,我才能够从第一页读取数据(使用Python的XPATH选择元素?)但我无法让selenium在切换到第2页时等待数据表重新加载。我试图添加webdrive

  • 我试图创建一个等待加载页面的方法,但我出现了一个错误。可能我没有正确使用这个方法。 错误是:

  • 本文向大家介绍jQuery EasyUI 页面加载等待及页面等待层,包括了jQuery EasyUI 页面加载等待及页面等待层的使用技巧和注意事项,需要的朋友参考一下 下面一个代码片段是 easyUI 页面加载等待,代码如下所示: 下面看个工具类 基于easyui的页面等待提示层,即mask 效果图: 以上所述是小编给大家介绍的jQuery EasyUI 页面加载等待及页面等待层,希望对大家有所帮