我正在做浏览器自动化,并且在某个时刻被阻止:此刻,我要求浏览器单击一个按钮,该按钮又打开一个新窗口。但有时互联网太慢,因此这个新窗口需要一些时间来加载。我想知道如何让 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])
我不时收到此错误:
新窗口=新窗口[1]
IndexError:列表索引超出范围
这让我认为简单的“time.sleep(5)”并不能完成这项工作。
所以,我的问题是,如何等到这个新窗口完全加载后再与其交互?
thanks
您可以尝试使用以下代码等待新窗口出现:
WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))
你的代码应该看起来像
Button.click()
WebDriverWait(driver, 20).until(EC.number_of_windows_to_be(2))
newWindow = driver.window_handles
newNewWindow = newWindow[1]
driver.switch_to.window(newNewWindow)
考虑@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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)