当前位置: 首页 > 知识库问答 >
问题:

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。这导致我正在阅读的文本不完整,因为在单击()命令后页面没有完全加载。似乎在python中clickAndWait命令是不可用的(但同样,它可能无法解决问题,因为其他测试也会失败)。理想情况下,会有一个命令一直等到整个网页被加载(不管页面的特定元素)。

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

感谢

共有2个答案

濮阳旺
2023-03-14

以下是我用过的版本:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def waitForLoad(inputXPath): 
    Wait = WebDriverWait(browser, PATIENCE_TIME)       
    Wait.until(EC.presence_of_element_located((By.XPATH, inputXPath)))

函数中的顶行是一般等待。第二个是预期的条件,它试图找到您知道页面上存在的元素。你可以改变它,而不是Xpath,它做CSS_SELECTOR,名称,ID,类等,还有很多其他的,但你必须查找预期的条件文档。希望有所帮助,当我弄清楚时,它帮助了我。

于鹏
2023-03-14

从根本上说,如果页面是由JavaScript生成的,那么就无法判断它何时“完成”加载。

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

必须有一些DOM元素,您可以使用其可见性来测试页面是否已“完成”加载。在我的测试用例中,我通常有一个<code>wait_for_element_visibility

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。这会导致我正在阅读的文本不完整,因为click()命令后页面未完

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

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

  • 我对selenium webdriver有问题,如果有人能帮助我,我将非常感激 环境: 硒服务器独立-2.31.0.jar / 硒-服务器-独立-2.35.0.jar IE驱动程序服务器.exe(已尝试版本 2.28 - 2.35) 示例代码: 问题:修复这些问题都会对我有所帮助 href。sendKeys()成功模拟用户单击,但不等待页面加载。 href。click()无法模拟用户单击,但成功等

  • Selenium的SafariDriver似乎不会等待网页加载。我的测试如下: 如果您使用或运行此功能,它将正常运行,即搜索“您好世界”,然后在结果页面上转到图像结果。 使用,它会失败: 找不到的元素是“Images”,因为页面在运行该语句之前没有加载。 这是预期行为吗?我应该是狩猎旅行的特例吗?

  • 问题内容: 您如何使Selenium 2.0等待页面加载? 问题答案: 你可以期望显示一些元素。类似于C#: