Как открыть новое окно или вкладку в webdriver (Python)?

Я пробовал различные команды вроде

driver.switch_to_window("_blank") 

или

 driver.switch_to_window(None) 

но никто из них не работал. Как это должно быть сделано? Благодарю.

4 Solutions collect form web for “Как открыть новое окно или вкладку в webdriver (Python)?”

Посмотрите на этот вопрос . Похоже, что библиотека не поддерживает управление вкладками atm.

Но второй по высоте рейтинг дает решение. Я думаю, вы можете легко перевести его на Python.

После тонны googling я наткнулся на то, что работает для меня в Firefox, и что так просто (элегантно, может быть?), Чтобы быть почти смешным. Вот:

 >>> from selenium import webdriver >>> driver = webdriver.Firefox() >>> driver.execute_script("window.open('');") <--- JAVASCRIPT! 

Я решил проблему таким образом:

 a_elem = driver.find_element_by_link_text("Link with _blank") self.driver.get(a_elem.get_attribute('href')) 

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

 with link_in_new_window(driver, link_element): driver.foo() # this is in the new window opened from the link driver.foo() # this is back in the original window 

..что я считаю очень удобным.

 from contextlib import contextmanager from selenium.common import exceptions from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys # Fundamentally, this shift-clicks to open a new window, and # hits ctrl-w to close it when done, using ActionChains. @contextmanager def link_in_new_window(driver, element): """Open a clickable element in a new window for this context This opens a clickable element in a new window, and switches `driver` to that window for the duration of the context. The window is closed afterward, and the driver switched back to the original window. If the 'as' clause is used, the handle of the parent (original) window is provided as the value. Selenium doesn't provide a useful interface to firefox's tabs due to some technical complications, so we use new windows instead of new tabs. The memory hit isn't too significant. :type driver: selenium.webdriver.Firefox :type element: selenium.webdriver.remote.webelement.WebElement :returns: Parent's Window Handle """ known_handles = set(driver.window_handles) original_handle = driver.current_window_handle action = ActionChains(driver) # Open link in new window (shift-click element) # Sometimes, shift would be ignored. move_to_element helped. action.move_to_element(element) .key_down(Keys.SHIFT) .click(element) .key_up(Keys.SHIFT) .perform() # Find the new window handle. ..anyone know a better way? timeout = time.time() + 10 new_handles = set(driver.window_handles) - known_handles while time.time() < timeout and not new_handles: new_handles = set(driver.window_handles) - known_handles time.sleep(0.5) if not new_handles or len(new_handles) != 1: msg = "Expected one handle, found {}" raise RuntimeError(msg.format(len(new_handles)), new_handles) new_handle = new_handles.pop() driver.switch_to.window(new_handle) try: # User code will be executed here yield original_handle finally: # close window, if it still exists (ctrl-w) try: driver.switch_to.window(new_handle) action = ActionChains(driver) action.key_down(Keys.CONTROL).send_keys('w').perform() except exceptions.NoSuchWindowException: pass # in any case, switch back to the original window driver.switch_to.window(original_handle) 
  • Перейти к веб-диалоговому окну в selenium webdriver: Python
  • Автоматические скриншоты при неудаче теста Selenium Webdriver в Python
  • Пример события касания с webdriver python?
  • функция для переключения кадров в python, селен
  • Как отправить несколько ключей в WebDriver с помощью Python?
  • Ошибка Selenium Webdriver: «Невозможно загрузить профиль»
  • Selenium - идентифицировать веб-элемент с помощью src или alt
  • Как исправить Selenium WebDriverException: браузер, кажется, вышел, прежде чем мы могли подключиться?
  • Python - лучший язык программирования в мире.