Selenium Python不会关闭子窗口

时间:2018-12-16 06:40:20

标签: python-3.x selenium selenium-webdriver webdriverwait window-handles

我有一个网页,单击该网页即可打开新的浏览器窗口。我能够获得2个句柄,但是driver.close()总是关闭第一个/主窗口。

from selenium import webdriver
import time
driver = webdriver.Chrome() 
driver.get("file:///D:/blackhole/print.html")
han = driver.window_handles
print("handles:", han) # gets 1 handle
time.sleep(2)
click_btn = driver.find_element_by_link_text('Print')
click_btn.click()
han = driver.window_handles
print("handles:", han) # gets 2 handles
driver.switch_to_window = han[1] # first element is always first window handle
driver.close() # main window close

在调用新窗口的网页代码下方

<a href="print.html"  
onclick="window.open('popprint.html', 
                    'newwindow', 
                    'width=300,height=250'); 
        return false;"
>Print</a>

Firefox的行为也相同。 Python 3.6.7

2 个答案:

答案 0 :(得分:0)

driver.close()仅关闭当前窗口。 要关闭所有Windows并退出网络驱动程序,请致电driver.quit()

答案 1 :(得分:0)

无法关闭活动窗口,即新打开的窗口,因为实际上您尚未切换到打开的窗口

解决方案

关于Tab /窗口切换/处理的几句话:

  • switch_to_window(window_name)已经过时了一段时间,您需要使用driver.switch_to.window
  • 始终跟踪父窗口句柄,以便以后根据需要根据需要进行遍历。
  • 标签/ Windows 之间切换之前,始终将WebDriverWaitexpected_conditions用作number_of_windows_to_be(num_windows)
  • 始终跟踪子窗口句柄,以便您可以在需要时遍历。
  • 在提取页面标题之前,始终将expected_conditions作为title_contains("partial_page_title")使用 WebDriverWait
  • 这是您自己的代码,上面有一些小的调整:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe')
    driver.get("file:///D:/blackhole/print.html")
    parent_han  = driver.window_handles
    driver.find_element_by_link_text('Print').click()
    WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
    all_han = driver.window_handles
    new_han = [x for x in all_han if x != parent_han][0]
    driver.switch_to.window(new_han)
    driver.close()
    
  • 您可以在Selenium Switch Tabs

  • 中找到详细的讨论