Utilisez-vous le même navigateur tous les jours?
Laissez Selenium gérer ces opérations de navigateur!
Souhaitez-vous Ctrl + clic sur un lien pour l'ouvrir dans un nouvel onglet tout en touchant le navigateur? Je fais très bien w
Ce sera une telle série de flux.
sample.py
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import platform
driver = webdriver.Chrome("chromedriver.exe") #chromedriver.chargement exe
#
#
#Traitement jusqu'à la page correspondante
#
#
#Élément sur lequel cliquer
element = driver.find_element_by_xpath('/html/body/hogehoge')
#element = driver.find_element_by_link_text("hogehoge") #Cliquez ici si vous souhaitez l'obtenir avec le texte du lien
#Gérez la liste avant de cliquer
handles_befor = driver.window_handles
#(Lien)Ouvrir l'élément dans un nouvel onglet
actions = ActionChains(driver)
if platform.system() == 'Darwin':
#Touche de commande car c'est un Mac
actions.key_down(Keys.COMMAND)
else:
#Touches de contrôle car ce n'est pas un Mac
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.perform()
#Attendez jusqu'à 30 secondes pour que les nouveaux onglets s'ouvrent
WebDriverWait(driver, 30).until(lambda a: len(driver.window_handles) > len(handles_befor))
#Gérer la liste après avoir cliqué
handles_after = driver.window_handles
#Différence de liste de traitement
handle_new = list(handles_after - sethandles_befor)
#Aller au nouvel onglet
driver.switch_to.window(handle_new[0])
Attention à ne pas surcharger Mettons «wait» et «sleep» selon le cas.
sample.py
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
Chargez la bibliothèque Selenium et les packages dont vous avez besoin cette fois.
sample.py
import platform
Chargez la bibliothèque pour déterminer le système d'exploitation.
sample.py
driver = webdriver.Chrome("chromedriver.exe") #chromedriver.chargement exe
#
#
#Traitement jusqu'à la page correspondante
#
#
Lançons le pilote Chrome et faisons-le fonctionner.
sample.py
#Élément sur lequel cliquer
element = driver.find_element_by_xpath('/html/body/hogehoge')
#element = driver.find_element_by_link_text("hogehoge") #Cliquez ici si vous souhaitez l'obtenir avec le texte du lien
Attribuez l'élément sur lequel vous cliquez avec xpath
ou link_text
à une variable.
sample.py
#Gérez la liste avant de cliquer
handles_befor = driver.window_handles
Obtient le handle au format liste avant l'ouverture du nouvel onglet.
sample.py
#(Lien)Ouvrir l'élément dans un nouvel onglet
actions = ActionChains(driver)
if platform.system() == 'Darwin':
#Touche de commande car c'est un Mac
actions.key_down(Keys.COMMAND)
else:
#Touches de contrôle car ce n'est pas un Mac
actions.key_down(Keys.CONTROL)
actions.click(element)
actions.perform()
Vous pouvez enregistrer et exécuter des frappes en utilisant une classe appelée ʻActionChains`. Sur Mac et autres OS, la touche de raccourci qui s'ouvre dans un nouvel onglet est différente pour le navigateur Google Chrome.
Mac: commande + clic Windows et Linux: Ctrl + clic
La bibliothèque de plate-forme détermine le système d'exploitation et crée une branche conditionnelle.
ʻL'opération de touche enregistrée par actions.perform () ʻest exécutée.
sample.py
#Attendez jusqu'à 30 secondes pour que les nouveaux onglets s'ouvrent
WebDriverWait(driver, 30).until(lambda a: len(driver.window_handles) > len(handles_befor))
L'ouverture d'un nouvel onglet peut prendre un certain temps, alors attendez.
WebDriverWait (pilote, 30)). Till
permettra au pilote d'attendre jusqu'à 30 secondes.
Dans lambda a: len (driver.window_handles)> len (handles_befor)
, il est décrit en une ligne en utilisant une expression lambda.
len (handles_befor)
que le nombre de poignées avant d'ouvrir dans un nouvel onglet
len (driver.window_handles)
L'attente sera annulée lorsque le nombre de poignées dépassera le moment où un nouvel onglet est ouvert.
sample.py
#Gérer la liste après avoir cliqué
handles_after = driver.window_handles
Obtient le handle au format liste après l'ouverture du nouvel onglet.
sample.py
#Différence de liste de traitement
handle_new = list(handles_after - handles_befor)
Vous pouvez obtenir la différence en soustrayant la liste avec -
.
Je l'assigne à une variable.
sample.py
#Aller au nouvel onglet
driver.switch_to.window(handle_new[0])
La différence handle_new [0]
devient le handle du nouvel onglet, alors déplacez-le avec switch_to.window
.
Pour que vous puissiez toujours revenir en arrière si vous ouvrez trop d'onglets et ne comprenez pas (Ne faisons pas ça w)
Vous voudrez peut-être obtenir la poignée actuelle à l'avance.
sample.py
#Fenêtre actuelle(languette)Remplacez la poignée de
current_handle = driver.current_window_handle
#
#
#En traitement
#
#
#Fenêtre actuelle(languette)Déménager à
driver.switch_to.window(current_handle)
Merci beaucoup!