我的用例是,只要打开太多标签,就关闭除第一个标签之外的所有标签。 switch_to
可以正常工作,问题在于关闭。我尝试只关闭一个,然后打破循环,但它仍然关闭包括父选项卡在内的所有内容。我的猜测是driver.close()
可能不是正确的方法。
driver = webdriver.Chrome(CHROME_DRIVER_PATH)
driver.get("https://google.com")
//Do something here where multiple tabs get opened
if len(driver.window_handles) > 5:
for handle in driver.window_handles:
if handle is not driver.current_window_handle:
driver.switch_to.window(handle)
driver.close()
driver.switch_to.window(driver.current_window_handle)
答案 0 :(得分:1)
尝试替换:
if driver.window_handles[i] != original_window_handle:
具有:
if driver.window_handles[i] is not original_window_handle:
答案 1 :(得分:-2)
代码中的主要问题之一是您仅检查一次是否有5个以上的句柄...然后进入一个循环,在其中关闭所有选项卡(不检查句柄数)。我更改了逻辑,以使其循环直到处理<= 5。
driver = webdriver.Chrome(CHROME_DRIVER_PATH)
driver.get("https://google.com")
//Do something here where multiple tabs get opened
if len(driver.window_handles) > 5:
current_window = driver.current_window_handle
i = 0
while len(driver.window_handles) > 1:
if driver.window_handles[i] == current_window:
i += 1
else:
driver.switch_to.window(driver.window_handles[i])
driver.close()
driver.switch_to.window(driver.current_window_handle)
理想情况下,您将获取窗口句柄代码并将其放入函数中,以便可以在需要时调用它,然后在完成一些您知道会产生一些新窗口并拥有它的操作后才调用它全部清理干净。