[Selenium] Ouvrez le lien dans un nouvel onglet et déplacez-le [Pilote Python / Chrome]

Utilisez-vous le navigateur?

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.

Ouvrez et déplacez le lien dans un nouvel onglet

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.

Commentaire

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.

prime

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!

Recommended Posts

[Selenium] Ouvrez le lien dans un nouvel onglet et déplacez-le [Pilote Python / Chrome]
[Python / Jupyter] Traduisez le commentaire du programme copié dans le presse-papiers et insérez-le dans une nouvelle cellule.
Que faire si une erreur de version se produit dans le pilote Selenium Chrome
Le résultat de la création d'un album de cartes de jeunes mariés italiens en Python et de son partage
[Selenium] Imprimer sans en-tête ni pied de page (forcé) [Pilote Python / Chrome]
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
Comment déterminer l'existence d'un élément sélénium en Python
Nouvelle grammaire et fonctionnalités Python non mentionnées dans le livre d'introduction
Vérifiez et déplacez le répertoire en Python
[Python] Le rôle de l'astérisque devant la variable. Divisez la valeur d'entrée et affectez-la à une variable
Conseils d'utilisation de Selenium et Headless Chrome dans un environnement CUI
Sélénium et python pour ouvrir Google
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Quand Selenium dit que la version du pilote Chrome est différente (Python)
Mettez le résultat du chat entre guillemets et mettez-le dans une variable
J'ai défini des variables d'environnement dans Docker et je les ai affichées en Python.
Ouvrez un fichier Excel en Python et coloriez la carte du Japon
Ecrire le test dans la docstring python
Exécuter l'interpréteur Python dans le script
Captures d'écran de la pêche sur le Web avec du sélénium et Chrome.
Trouvez-le dans la file d'attente et modifiez-le
Python open et io.open sont les mêmes
Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
Apprentissage amélioré 35 python Développement local, attachez un lien vers myModule et importez-le.
Transformez un programme Python en démon et exécutez-le automatiquement au démarrage du système d'exploitation
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
Notez que je comprends l'algorithme des moindres carrés. Et je l'ai écrit en Python.
Créer un projet et une application Django dans un environnement virtuel Python et démarrer le serveur
Définir la valeur de division dans Django et la refléter facilement à l'écran
[Python] Lisez automatiquement les informations par préfecture du nouveau virus corona du PDF du ministère de la Santé, du Travail et du Bien-être social et écrivez-les dans un tableur ou Excel.
Organisez les modules et les packages Python dans le désordre
[Python] Récupérez les fichiers dans le dossier avec Python
Essayez d'exécuter Google Chrome avec Python et Selenium
Récupérer l'appelant d'une fonction en Python
ffmpeg-Construisez un environnement python et divisez la vidéo
J'ai écrit une classe en Python3 et Java
À propos de la différence entre "==" et "is" en python
Écrivons un programme Python et exécutons-le
Créer une nouvelle page en confluence avec Python
Sortie sous la forme d'un tableau python
POST JSON avec Python et recevez avec PHP
[Python] Trouvez la matrice de translocation en notation d'inclusion
Prise en compte des forces et faiblesses de Python
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Si vous définissez une méthode dans une classe Ruby, puis définissez une méthode dans celle-ci, elle devient une méthode de la classe d'origine.
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
Selenium-Screenshot est utile pour les captures d'écran de pages Web dans Python3, Selenium et Google Chrome
Obtenez des informations équivalentes à l'onglet Réseau des outils de développement Chrome avec Python + Selenium
[GCF + Python] Comment importer Excel vers GCS et créer une nouvelle table dans BigQuery
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
Ouvrez la page en mode secret en spécifiant la langue du navigateur avec les liaisons Selenium Python (Chrome)
Il semble qu'une nouvelle loterie avec un score total commencera dans la loterie sportive,
[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats