Quiero abrir bastantes URL en diferentes pestañas usando Selenium WebDriver y Python.

No estoy seguro de qué va mal:

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)

Busqué tutoriales y me parece que este código debería hacer lo que quiero. Lo que realmente sucede es que el navegador se abre, url1 se abre como debería, se abre una nueva pestaña como debería pero url2 luego se carga en la pestaña original en lugar de la nueva (aunque la nueva pestaña parece estar el activo)

(Estoy usando Chrome porque cuando uso Firefox no puedo hacer que cargue ninguna URL. Firefox se abre pero no obtiene la URL solicitada. He intentado encontrar una solución para esto, pero fue en vano).

¿Hay algo que pueda cambiar en mi código para que la nueva URL se abra en la nueva pestaña?

¡Gracias por tu ayuda!

9
SamH123 7 may. 2016 a las 15:33

4 respuestas

La mejor respuesta

Hay un error en ChromeDriver que impide que ctrl / command + T funcione:

Lo que puede hacer, como solución alternativa, es abrir un enlace en una nueva pestaña y luego cambiar a una nueva ventana usando switch_to.window(). Muestra de trabajo:

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")

Ahora el último driver.get() se realizaría en una pestaña recién abierta.

11
alecxe 7 may. 2016 a las 12:45

Una forma alternativa de abrir una nueva ventana es usar JavaScript y el controlador de ventana para alternar entre ellos.

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()

Si mira su navegador mientras está ejecutando, se verá como si la nueva ventana tuviera el foco, pero para el controlador web, no lo tiene. No te dejes engañar por lo visual. Recuerde también seleccionar un nuevo controlador de ventana cuando cierre una pestaña, ya que establecerá driver.current_window_handle en

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>)

En .close() y arrojará ese error si intentas hacer cosas con el controlador en esa etapa.

8
Gemtastic 13 feb. 2017 a las 13:40

Aquí hay una manera simple, plataforma independiente:

Código:

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

Volviendo a la pestaña original:

Código:

driver.switch_to_window(driver.window_handles[0])

Verificando el título actual para asegurarte de que estás en la página correcta:

Código:

driver.title

Por todo lo demás, ¡diviértete!

13
khelwood 26 sep. 2017 a las 12:04

Necesitas maximizar tu cromo para esto

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

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.google.com/")

e = driver.find_element_by_tag_name("body")
ActionChains(driver).key_down(Keys.CONTROL).click(e).send_keys("k").key_up(Keys.CONTROL).perform()

Aquí key_down(Keys.CONTROL) mantendrá presionada la tecla Ctrl, para enfocarme en la página estoy haciendo clic en el cuerpo de la página, luego haga clic en k

0
Nihal 15 mar. 2019 a las 05:04