Как открыть новое окно в браузере с помощью Selenium WebDriver для python?

Я пытаюсь открыть новую вкладку или новое окно в браузере, используя selenium для python. Это не имеет большого значения, если открывается новая вкладка или новое окно, важно только, чтобы был открыт второй экземпляр браузера.

Я уже пробовал несколько разных методов, и ни один из них не удался.

  1. переключение на окно, которое не существует с надеждой, что он затем откроет новое окно при невозможности найти сказал окно:

    driver.switch_to_window(None)

  2. итерация через открытые окна (хотя в настоящее время есть только один)

    for handle in driver.window_handles:
        driver.switch_to_window(handle)
    
  3. попытка имитировать нажатие клавиши клавиатуры

    from selenium.webdriver.common.keys import Keys
    driver.send_keys(Keys.CONTROL + 'T')
    

проблема с этим, в частности, заключалась в том, что не представляется возможным отправлять ключи непосредственно в браузер, только к определенному элементу, как это:

driver.find_element_by_id('elementID').send_keys(Keys.CONTROL + 'T')

однако, когда отправляется такая команда, как эта элементу кажется, что он абсолютно ничего не делает. Я попытался найти самый верхний HTML-элемент на странице и отправить ключи к нему, но снова потерпел неудачу:

driver.find_element_by_id('wrapper').send_keys(Keys.CONTROL + 'T')

другую версию этого я нашел в интернете и не смог проверить ее действительность или отсутствие, потому что я не уверен, какой класс/модуль, который нуждается в импорте

act = ActionChains(driver)
act.key_down(browserKeys.CONTROL)
act.click("").perform()
act.key_up(browserKeys.CONTROL)

что-то очень похожее с другим синтаксисом (я не уверен, что один или оба из них верны синтаксис)

actions.key_down(Keys.CONTROL)
element.send_keys('t')
actions.key_up(Keys.CONTROL)

3 ответов


как насчет того, чтобы сделать что-то вроде этого

driver = webdriver.Firefox() #First FF window
second_driver = webdriver.Firefox() #The new window you wanted to open

В зависимости от того, с каким окном вы хотите взаимодействовать, вы отправляете команды соответственно

print driver.title #to interact with the first driver
print second_driver.title #to interact with the second driver

для всех избирателей:


ОП попросил "it is only important that a second instance of the browser is opened.". Этот ответ не охватывает все возможные требования каждого варианта использования. Другие ответы ниже могут удовлетворить ваши конкретные потребности.


можно использовать execute_script открыть новое окно.

driver = webdriver.Firefox()
driver.get("https://linkedin.com")
driver.execute_script("$(window.open('https://twitter.com'))")
print driver.current_window_handle

# Switch to new window
driver.switch_to_window(driver.window_handles[-1])
print " Twitter window should go to facebook "
print "New window ", driver.title
driver.get("http://facebook.com")
print "New window ", driver.title

# Switch to old window
driver.switch_to_window(driver.window_handles[0])
print " Linkedin should go to gmail "
print "Old window ", driver.title
driver.get("http://gmail.com")
print "Old window ", driver.title

# Again new window
driver.switch_to_window(driver.window_handles[1])
print " Facebook window should go to Google "
print "New window ", driver.title
driver.get("http://google.com")
print "New window ", driver.title

Я рекомендую использовать CTRL + N команда на Firefox, чтобы уменьшить использование памяти меньше, чем для создания новых экземпляров браузера.

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

browser = webdriver.Firefox()
body = browser.find_element_by_tag_name('body')
body.send_keys(Keys.CONTROL + 'n')

способ переключения и управления окнами уже упоминался Dhiraj.