新标签的句柄在哪里? - Python Selenium

时间:2018-03-12 16:53:51

标签: python selenium internet-explorer web-scraping

我正在使用Python的Selenium(使用IE webdriver)打开一个新选项卡...但是,我无法获得新选项卡的句柄。以下是显示问题的示例代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

#open IE
driver = webdriver.Ie()

# Open new tab
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')

# Print handles
print(driver.window_handles)

上述印刷声明的答案是:

['5bd4ca0b-0095-4851-a36d-54f8c602c906']

我希望得到一个包含两个项目的列表,但我只得到一个。

如果我使用Chrome网络驱动程序,上面的代码就可以了。那么,这是IE webdriver中的一个错误吗?

1 个答案:

答案 0 :(得分:1)

官方说,你不能。 Selenium使用WebDriver规范与浏览器进行通信,但规范并不支持仅限制表符的窗口。

如您的示例所示,您可以破解特定浏览器和操作系统的变通方法。但是 显示的示例是您想要的原因。您有什么理由不能使用新窗口吗?

打开并使用新窗口

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

initial_windows = driver.window_handles
wait = WebDriverWait(driver, 10)
opened = EC.new_window_is_opened(initial_windows)

driver.execute_script("window.open();")
wait.until(opened)

initial_window = driver.current_window_handle
new_windows = list(set(driver.window_handles) - set(initial_windows))
new_window = new_windows[0]

driver.switch_to.window(new_window)
try:
    # ...
finally:
    driver.switch_to.window(initial_window)

奖励:使用capybara-py

进行简化
from capybara.dsl import page

with page.window(page.open_new_window()):
    # ...