问题
I want to close all open tabs (browser windows) without actually closing the driver, because I want to keep using it.
driver.close()
will just close the focused tab.driver.quit()
will close them all but also quit the driver.
I thought about using driver.quit()
and then re-opening the driver. But it does not seem very clean. Or maybe it is super clean, but also a slow thing to do.
Note: Using Firefox via geckodriver
How can I approach this?
回答1:
You can close the tabs by sending ctrl + w
to the page until you don't have any tabs left. Keep a record of how many tabs you opened and use a loop to close them
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')
This will close all the tabs but one. Closing the last one will not close the driver
, but you won't be able to use it.
回答2:
Window handles can be used for that as well. Loop through all opened windows and close them:
for handle in driver.window_handles:
driver.switch_to.window(handle)
driver.close()
This should close all browser windows.
回答3:
simply using this to ommit first tab, solution works for me!
try:
firstTime = True
for handle in browser.window_handles:
browser.switch_to.window(handle)
if(not firstTime):
browser.close()
firstTime = False
except:
return
来源:https://stackoverflow.com/questions/45141407/python-and-selenium-close-all-tabs-without-closing-the-browser