Selenium не откроет новый URL-адрес на новой вкладке (Python & Chrome)

Я хочу открыть несколько URL-адресов на разных вкладках, используя Selenium WebDriver & Python.

Я не уверен, что происходит не так:

driver = webdriver.Chrome() driver.get(url1) time.sleep(5) driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL+'t') url2 = 'https://www.google.com' driver.get(item2) 

Я искал учебники, и мне кажется, что этот код должен делать то, что я хочу. Что на самом деле происходит, браузер открывается, url1 открывается, как и следовало ожидать, новая вкладка открывается, как и следовало ожидать, но url2 затем загружается в исходную вкладку вместо новой (хотя новая вкладка является активной).

(Я использую Chrome, потому что при использовании Firefox я не могу заставить его загружать любые URL-адреса вообще. Firefox открывается, но не получает запрашиваемый URL-адрес. Я попытался найти решение для этого, но безрезультатно).

Есть ли что-нибудь, что я могу изменить в своем коде, чтобы открыть новый URL на новой вкладке?

Спасибо за вашу помощь!

3 Solutions collect form web for “Selenium не откроет новый URL-адрес на новой вкладке (Python & Chrome)”

В ChromeDriver есть ошибка, которая предотвращает работу ctrl / command + T:

  • Я не могу открыть новую вкладку в ChromeDriver

В качестве обходного пути вы можете открыть ссылку на новой вкладке, а затем перейти в новое окно с помощью switch_to.window() . Рабочий образец:

 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("https://www.google.com") # open a link in a new window actions = ActionChains(driver) about = driver.find_element_by_link_text('About') actions.key_down(Keys.CONTROL).click(about).key_up(Keys.CONTROL).perform() driver.switch_to.window(driver.window_handles[-1]) driver.get("https://stackoverflow.com") 

Теперь последний driver.get() будет выполнен на вновь открытой вкладке.

Вот простой способ, независимый от платформы:

Код:

 driver.execute_script("window.open('http://google.com', 'new_window')") 

Переход на исходную вкладку:

Код:

 driver.switch_to_window(driver.window_handles[0]) 

Проверка текущего заголовка, чтобы убедиться, что вы находитесь на правой странице:

Код:

 driver.title 

Для всего остального, получайте удовольствие!

Альтернативный способ открыть новое окно – использовать JavaScript и обработчик окна для переключения между ними.

 driver = webdriver.Chrome() # Open a new window # This does not change focus to the new window for the driver. driver.execute_script("window.open('');") # Switch to the new window driver.switch_to.window(driver.window_handles[1]) driver.get("http://stackoverflow.com") # close the active tab driver.close() # Switch back to the first tab driver.switch_to.window(driver.window_handles[0]) driver.get("http://google.se") # Close the only tab, will also close the browser. driver.close() 

Если вы посмотрите на свой браузер во время выполнения, это будет выглядеть так, как в новом окне есть фокус, но для webdriver это не так. Не обманывайтесь визуальным. Также не забудьте выбрать новый обработчик окна при закрытии вкладки, поскольку он установит driver.current_window_handle в

 selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed from unknown error: web view not found (Session info: chrome=<Your version of chrome>) (Driver info: chromedriver=<Your chrome driver version> (<string of numbers>),platform=<Your OS>) 

на .close() и он выкинет эту ошибку, если вы попытаетесь сделать что-то с драйвером на этом этапе.

Interesting Posts

python opencv cv2.cv.CV_CAP_PROP_FRAME_COUNT получить неправильные номера

использование функций для отображения номеров в списке

Django: Получить объект из БД или «Нет», если ничего не соответствует

Есть ли способ передать разные вертикальные линии каждому подзаговору при использовании гистограммы панды с помощью «by = somevar»?

Фильтрация даты на оси x с помощью matplotlib Python

Почему глобальные скобки не копируются, когда я запускаю eval с аргументом globals?

Имитация запроса ajax с помощью python с использованием запросов lib

python 3.2 установлен, но MAC его не распознал

Django: при создании нового проекта появляется сообщение «django-admin.py: command not found».

Python, pinax, django, windows AttributeError: объект 'module' не имеет атрибута 'call_subprocess'

OAuth и API YouTube

Производительность: Python pandas DataFrame.to_csv добавляется постепенно медленнее

Использование инструкции «с» для файлов CSV в Python

многопроцессор python – процесс зависает при соединении для большой очереди

Pandas: переформатируйте широкоформатный фрейм на многоиндексный длинный

Python - лучший язык программирования в мире.