gpt4 book ai didi

Python。 Selenium 。如何等待新窗口打开?

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:59 24 4
gpt4 key购买 nike

我有一个推特按钮,点击后新窗口打开,但在打开之前有几秒钟的超时,所以有没有办法等待它?我现在的处境很糟糕......

    Ui.click_el(link.W9FormNodes.TWITTER_BUTTON)
# Wait for new window and switch to it
time.sleep(3)
aw = driver.window_handles
driver.switch_to_window(aw[1])

所以我需要更好的东西,它只会等待所需的秒数。

我想我是这样解决的。但也许有人会评论如何做得更好。

    aw = Ui.click_and_wait_for_window(link.W9FormNodes.TWITTER_BUTTON)
driver.switch_to_window(aw[1])

这是一个点击按钮并等待新窗口的方法:

    def click_and_wait_for_window(self, node):
current_value = old_value = self.driver.window_handles
self.click_el(node)
while len(current_value) == len(old_value):
time.sleep(0.05)
current_value = self.driver.window_handles
return current_value

最佳答案

正如 Surya 提到的,WebDriverWait 将是等待更改的方式。您可以拥有这样的上下文管理器,它实现等待逻辑,然后将其用于您关心的任何类型的操作:

@contextmanager
def wait_for_new_window(driver, timeout=10):
handles_before = driver.window_handles
yield
WebDriverWait(driver, timeout).until(
lambda driver: len(handles_before) != len(driver.window_handles))

这是一个完整的工作示例:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

from contextlib import contextmanager

@contextmanager
def wait_for_new_window(driver, timeout=10):
handles_before = driver.window_handles
yield
WebDriverWait(driver, timeout).until(
lambda driver: len(handles_before) != len(driver.window_handles))

driver = webdriver.Chrome()

driver.get("http://www.google.com")

with wait_for_new_window(driver):
driver.execute_script("""
window.open("http://www.google.com", "_blank");
""")

with wait_for_new_window(driver, 2):
pass # This will obviously hit the timeout.

driver.quit()

关于Python。 Selenium 。如何等待新窗口打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com