Python和Selenium-关闭所有选项卡而不关闭浏览器

Python和Selenium-关闭所有选项卡而不关闭浏览器,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我想关闭所有打开的选项卡(浏览器窗口),而不实际关闭驱动程序,因为我想继续使用它 driver.close()将只关闭焦点选项卡。 driver.quit()将关闭它们,但也将退出驱动程序 我考虑使用驱动程序。退出(),然后重新打开驱动程序。但是它看起来不太干净。或者也许它是超级干净的,但也是一件缓慢的事情 注意:通过geckodriver使用Firefox 如何实现此目的?您可以通过向页面发送ctrl+w来关闭选项卡,直到没有任何选项卡为止。记录打开的选项卡数量,并使用循环关闭它们 from

我想关闭所有打开的选项卡(浏览器窗口),而不实际关闭驱动程序,因为我想继续使用它

driver.close()
将只关闭焦点选项卡。
driver.quit()
将关闭它们,但也将退出驱动程序

我考虑使用
驱动程序。退出()
,然后重新打开驱动程序。但是它看起来不太干净。或者也许它是超级干净的,但也是一件缓慢的事情

注意:通过geckodriver使用Firefox


如何实现此目的?

您可以通过向页面发送
ctrl+w
来关闭选项卡,直到没有任何选项卡为止。记录打开的选项卡数量,并使用循环关闭它们

from selenium.webdriver.common.keys import Keys

num_of_tabs = ...
for x in range(1, num_of_tabs):
    self.driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 'W')

这将关闭除一个选项卡外的所有选项卡。关闭最后一个将不会关闭
驱动程序,但您将无法使用它。

也可以使用窗口句柄。循环浏览所有打开的窗口并关闭它们:

for handle in driver.window_handles:
    driver.switch_to.window(handle)
    driver.close()

这应该会关闭所有浏览器窗口。

只需使用此选项来编辑第一个选项卡,解决方案对我有效

    try:
    firstTime = True
    for handle in browser.window_handles:
        browser.switch_to.window(handle)
        if(not firstTime):
            browser.close()
        firstTime = False
except:
    return

这个线程处理了一个类似的问题:我相信,如果我们在最后一个选项卡中使用driver.close,它实际上会退出驱动程序,并且与driver.quit类似。我们所能做的是,我们可以打开一个虚拟选项卡,并使用windowhandles关闭所有其他窗口。您使用的是什么浏览器?@Guy firefox via geckodriverquisition。“自我”在这里真的有必要吗?@Salamarkesa我看到了编辑建议。我没有使用geckodriver,但据我所知,FireFox中的新选项卡没有其他窗口句柄,您总共有一个。好吧,我的困惑。非常感谢。您使用哪种浏览器?为什么?[我对硒还不熟悉,但想充分利用它]。由于这与原来的问题不同,您可以忽略我的评论。@Salamarkesa我们使用的是FireFox版本47,因此无需使用
geckodriver
。我从与学院的讨论中了解到(因此没有官方的参考源代码),
geckodriver
尚未由其他驱动程序标准构建,因此可能存在我们现在更愿意避免的问题。我想指出,这将适用于Python,但如果您希望使用另一种语言(例如Ruby或PHP,这是内存中的两个示例),与选项卡交互的方式有限,简单的键盘快捷键无法按预期工作。有一些方法可以在已打开的浏览器窗口之间切换,但我还没有找到任何方法真正打开新选项卡(至少对于Ruby).你能通过加入解释来改进这个答案吗?
curr=driver.current_window_handle
for handle in driver.window_handles:
   driver.switch_to.window(handle)
   if handle != curr:
      driver.close()