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

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

触发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是我自己的功能之一,但我希望它很清楚自己在做什么。

Selenium Chromedriver Python-使用Tor代理加载ModHeader扩展时,“无法等待扩展背景页面加载” - python

该错误是在以前运行正常的程序中无处发生的。绝对可以肯定的是,由于它的功能完善,因此我没有对程序进行任何更改,因此这是迄今为止我所遇到的最奇怪,最令人沮丧的错误。这是我要执行的代码:chrome_options.add_extension('C:\\chromedriver\\ModHeader_v (1).crx') chrome_opt…

如何检查Selenium Python Webdriver中是否选中了一个复选框? - python

我正在搜索一个星期,如何使用python在Selenium Webdriver中检查复选框是否被选中,但是我只能从JAVA中找到算法。我阅读了webdriver文档,但没有答案。有人有解决办法吗? 参考方案 有一个名为is_selected()的WebElement属性,对于复选框,它指示是否选中它。因此,您可以通过执行以下操作来验证是否已选中/未选中:dr…

使用Selenium(Python)获取输入框的值 - python

我正在尝试提取输入框中的文本,<input type="text" name="inputbox" value="name" class="box"> 我开始input = driver.find_element_by_name("inputbox"…

Python + Selenium:我无法从div获取打印文本 - python

Python + Selenium:我无法从此div获取打印文本:<div id="modal-content-18" class="modal-content" data-role="content"> <div> SignUp Failed. Please Try Aga…

Python Selenium:单击下拉菜单中的选项时可以更改值吗? - javascript

我正在使用python硒进行一些搜索。在我查询的一个网页上,搜索对话框允许我通过下拉菜单指定是否要搜索所有部分或特定部分。要选择哪个部分,该站点在弹出窗口中有一些单独的对话框,我可以单击一个部分,然后在内部为下拉菜单中的“此部分”选项分配选定部分的值。这是检查选择器时的外观: <select ...> <option id="se…