Python3.5Selenium如何处理一个新窗口并等待它完全加载?

2024-10-01 09:39:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行浏览器自动化,但在某一点上我被阻止了:在某一时刻,我要求浏览器单击某个按钮,这会打开一个新窗口。但是有时候互联网太慢了,所以这个新窗口需要时间来加载。我想知道怎样才能让Selenium等到这个新窗口完全加载。在

我的代码是:

driver.switch_to.default_content()
Button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'addPicturesBtn')))
Button.click()
newWindow = driver.window_handles
time.sleep(5)
newNewWindow = newWindow[1]
driver.switch_to.window(newNewWindow)
newButtonToLoad = driver.find_element_by_id('d')
newButtonToLoad.send_keys('pic.jpg')
uploadButton = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'uploadPics')))
uploadButton.click()
driver.switch_to.window(newWindow[0])

我时常会遇到这样的错误:

newNewWindow = newWindow[1]

IndexError: list index out of range

这让我觉得时间。睡觉(5) “不做这项工作。在

所以,我的问题是,如何等到这个新窗口完全加载后再与它交互?

谢谢


Tags: todriver时间浏览器buttonelementbewindow
1条回答
网友
1楼 · 发布于 2024-10-01 09:39:55

您可以尝试使用以下代码等待新窗口出现:

WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))

你的代码应该看起来像

^{pr2}$

考虑到@JimEvans的评论,请尝试以下内容:

current = driver.window_handles[0]
Button.click()

WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))

newWindow = [window for window in driver.window_handles if window != current][0]
driver.switch_to.window(newWindow)

相关问题 更多 >