Как открыть новое окно в браузере с помощью Selenium WebDriver для python?
Я пытаюсь открыть новую вкладку или новое окно в браузере, используя selenium для python. Это не имеет большого значения, если открывается новая вкладка или новое окно, важно только, чтобы был открыт второй экземпляр браузера.
Я уже пробовал несколько разных методов, и ни один из них не удался.
-
переключение на окно, которое не существует с надеждой, что он затем откроет новое окно при невозможности найти сказал окно:
driver.switch_to_window(None)
-
итерация через открытые окна (хотя в настоящее время есть только один)
for handle in driver.window_handles: driver.switch_to_window(handle)
-
попытка имитировать нажатие клавиши клавиатуры
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.