当前位置: 首页 > 面试题库 >

Python 3.5-Selenium-如何处理新窗口并等待其完全加载?

公良高刚
2023-03-14
问题内容

我正在执行浏览器自动化,并且在某个时候被阻止:稍后,我要求浏览器单击一个按钮,该按钮又打开一个新窗口。但是有时Internet太慢,因此加载新窗口需要时间。我想知道如何让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:列表索引超出范围

这让我认为简单的“ time.sleep(5)”无法完成工作。

所以,我的问题是,如何与该新窗口完全加载后再进行交互?

谢谢


问题答案:

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

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)


 类似资料:
  • 我正在进行浏览器自动化,并且我在某个时候被阻止:在某个时刻,我要求浏览器单击一个按钮,这反过来又打开了一个新窗口。但有时互联网太慢,所以这个新窗口需要时间来加载。我想知道我怎么能让硒等到这个新的新窗口完全加载。 这是我的代码: 我不时收到此错误: newNewWindow = newWindow[1] 索引错误: 列表索引超出范围 这让我觉得简单的“time.sleep(5)”并不能完成这项工作。

  • 我目前正在使用C#WebDriver的chrome驱动程序。我面临的一个问题是等待“exist”或“visible”在我的情况下不起作用,因为模态窗口需要一些时间才能消失。我得到了这个错误: 那么我该如何“等待”直到模态背景完全消失后才尝试点击它背后的东西呢?这不是本机javascript模式。这是一种别出心裁的第三方模式,它用一个透明的“盖子”滑进滑出,当它打开时,可以防止点击其他任何东西。

  • 我试过下面的方法,但效果不理想。

  • 问题内容: 我想从表格中的页面中抓取一些数据。所以我只为表中的数据而烦恼。之前我使用过Mechanize,但有时发现某些数据丢失了,尤其是在表格的底部。谷歌搜索,我发现这可能是由于机械化无法处理Jquery / Ajax。 所以我今天改用selenium。我该如何等待一个只有一个表完全加载,然后使用Selenium和python从该表中提取所有链接?如果我等待整个页面加载,则需要一些时间。我想确保

  • 我开发网络爬虫有一段时间了,对我来说最常见的问题是等待页面完全加载,包括请求,框架,脚本。我是说彻底结束了。 我使用了几种方法来修复它,但当我使用多个线程来抓取网站时,我总是遇到这种问题。驱动程序打开自己,通过URL,不等待并通过下一个URL。 我的尝试是: wait . until(expected conditions . visibilityofelementlocated(by . XPa

  • 我无法在窗口之间切换。打开弹出窗口时光标被击中。无法再前进了。测试案例:打开URL:http://voltaerp.cloudapp.net/VomsDemoV2/点击查询选项卡,然后点击子菜单项“国外查询”。这将把用户重定向到国外查询页面。现在单击绿色加号从弹出菜单中选择一个项目。我到现在都很好。一旦窗口打开,代码就会被卡住。无法读取弹出窗口的ID或将驱动程序切换到弹出窗口,以便我可以选择任何项