Comment ouvrir une nouvelle fenêtre sur un navigateur en utilisant Selenium WebDriver pour python?
j'essaie d'ouvrir un nouvel onglet ou une nouvelle fenêtre dans un navigateur utilisant selenium pour python. Il est de peu d'importance si un nouvel onglet ou une nouvelle fenêtre est ouverte, il est seulement important que d'une deuxième instance du navigateur est ouvert.
j'ai déjà essayé plusieurs méthodes différentes et aucune n'a réussi.
passer à une fenêtre qui n'existe pas avec l'espoir qu'elle ouvrirait alors une nouvelle fenêtre à défaut de localiser ladite fenêtre:
driver.switch_to_window(None)
une Itération à travers les fenêtres ouvertes (bien qu'il existe actuellement un seul)
for handle in driver.window_handles: driver.switch_to_window(handle)
tentative de simuler une touche de clavier appuyez sur
from selenium.webdriver.common.keys import Keys driver.send_keys(Keys.CONTROL + 'T')
Le problème avec celui-ci en particulier est qu'il ne semble pas possible d'envoyer des clés directement dans le navigateur, seulement pour un élément spécifique, comme ceci:
driver.find_element_by_id('elementID').send_keys(Keys.CONTROL + 'T')
Toutefois, lorsqu'une commande est envoyée à un élément, il semble ne rien faire du tout. J'ai essayé de localiser L'élément HTML le plus haut sur la page et d'envoyer les clés pour cela, mais a de nouveau rencontré un échec:
driver.find_element_by_id('wrapper').send_keys(Keys.CONTROL + 'T')
une autre version de ce que j'ai trouvé en ligne, et n'a pas été en mesure de vérifier sa validité ou son absence parce que je ne suis pas sûr quelle classe/module qui doit importer
act = ActionChains(driver)
act.key_down(browserKeys.CONTROL)
act.click("").perform()
act.key_up(browserKeys.CONTROL)
quelque Chose de très similaire avec une syntaxe différente (je ne suis pas sûr si l'un ou les deux de ces est la syntaxe correcte)
actions.key_down(Keys.CONTROL)
element.send_keys('t')
actions.key_up(Keys.CONTROL)
3 réponses
que diriez-vous de faire quelque chose comme ceci
driver = webdriver.Firefox() #First FF window
second_driver = webdriver.Firefox() #The new window you wanted to open
selon la fenêtre avec laquelle vous voulez interagir, vous envoyez les commandes en conséquence
print driver.title #to interact with the first driver
print second_driver.title #to interact with the second driver
Pour tous les électeurs:
L'OP a demandé "it is only important that a second instance of the browser is opened.
". Cette réponse n'englobe pas toutes les exigences possibles de chaque cas d'utilisation et de chacun.
Les autres réponses ci-dessous peuvent répondre à votre besoin particulier.
Vous pouvez utiliser execute_script
pour ouvrir une nouvelle fenêtre.
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
je vous recommande d'utiliser CTRL + N
commande sur Firefox pour réduire l'utilisation de mémoire que pour créer de nouvelles instances de navigateur.
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')
la façon de changer et de contrôler les fenêtres a déjà été mentionnée par Dhiraj.