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.

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

  2. 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)
    
  3. 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)
10
demandé sur Zach Posten 2013-06-26 20:31:09

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.

12
répondu Amey 2015-03-23 03:44:52

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
12
répondu Dhiraj 2014-07-09 13:52:37

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.

4
répondu fx-kirin 2017-05-23 12:18:10