[Selen] Öffnen Sie den Link in einem neuen Tab und verschieben Sie ihn [Python / Chrome-Treiber]

Bedienen Sie den Browser?

Bedienen Sie jeden Tag den gleichen Browser?

Lassen Sie Selenium solche Browseroperationen durchführen!

Möchten Sie bei gedrückter Strg-Taste auf einen Link klicken, um ihn in einem neuen Tab zu öffnen, während Sie den Browser berühren? Mir geht es sehr gut w

Es wird eine solche Reihe von Strömungen sein.

Öffnen Sie den Link und verschieben Sie ihn in eine neue Registerkarte

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.exe laden

#
#
#Verarbeitung bis zur entsprechenden Seite
#
#

#Element zum Klicken
element = driver.find_element_by_xpath('/html/body/hogehoge')
#element = driver.find_element_by_link_text("hogehoge") #Klicken Sie hier, wenn Sie es mit Linktext erhalten möchten

#Behandeln Sie die Liste, bevor Sie auf klicken
handles_befor = driver.window_handles

#(Verknüpfung)Element in neuer Registerkarte öffnen
actions = ActionChains(driver)

if platform.system() == 'Darwin':
    #Befehlstaste, da es sich um einen Mac handelt
    actions.key_down(Keys.COMMAND)
else:
    #Steuertasten, da es sich nicht um einen Mac handelt
    actions.key_down(Keys.CONTROL)

actions.click(element)
actions.perform()

#Warten Sie bis zu 30 Sekunden, bis sich neue Registerkarten öffnen
WebDriverWait(driver, 30).until(lambda a: len(driver.window_handles) > len(handles_befor))

#Liste nach dem Klicken bearbeiten
handles_after = driver.window_handles

#Listenunterschied behandeln
handle_new = list(handles_after - sethandles_befor)

#Gehen Sie zur neuen Registerkarte
driver.switch_to.window(handle_new[0])

Achten Sie darauf, nicht zu überladen Lassen Sie uns "Warten" und "Schlafen" entsprechend setzen.

Kommentar

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

Laden Sie die Selenium-Bibliothek und die Pakete, die Sie diesmal benötigen.

sample.py


import platform

Laden Sie die Bibliothek, um das Betriebssystem zu bestimmen.

sample.py


driver = webdriver.Chrome("chromedriver.exe") #chromedriver.exe laden

#
#
#Verarbeitung bis zur entsprechenden Seite
#
#

Starten wir den Chrome-Treiber und bedienen ihn.

sample.py


#Element zum Klicken
element = driver.find_element_by_xpath('/html/body/hogehoge')
#element = driver.find_element_by_link_text("hogehoge") #Klicken Sie hier, wenn Sie es mit Linktext erhalten möchten

Ordnen Sie das Element, auf das Sie mit "xpath" oder "link_text" klicken, einer Variablen zu.

sample.py


#Behandeln Sie die Liste, bevor Sie auf klicken
handles_befor = driver.window_handles

Ruft das Handle im Listenformat ab, bevor die neue Registerkarte geöffnet wird.

sample.py


#(Verknüpfung)Element in neuer Registerkarte öffnen
actions = ActionChains(driver)

if platform.system() == 'Darwin':
    #Befehlstaste, da es sich um einen Mac handelt
    actions.key_down(Keys.COMMAND)
else:
    #Steuertasten, da es sich nicht um einen Mac handelt
    actions.key_down(Keys.CONTROL)

actions.click(element)
actions.perform()

Mit der Klasse "ActionChains" können Sie Tastenanschläge aufzeichnen und ausführen. Unter Mac und anderen Betriebssystemen unterscheidet sich die Tastenkombination zum Öffnen in einem neuen Tab für den Google Chrome-Browser.

Mac: Befehl + Klick Windows und Linux: Strg + Klick

Die Plattformbibliothek bestimmt das Betriebssystem und erstellt eine bedingte Verzweigung.

Die von action.perform () aufgezeichnete Tastenoperation wird ausgeführt.

sample.py


#Warten Sie bis zu 30 Sekunden, bis sich neue Registerkarten öffnen
WebDriverWait(driver, 30).until(lambda a: len(driver.window_handles) > len(handles_befor))

Es kann einige Zeit dauern, bis eine neue Registerkarte geöffnet wird. Lassen Sie sie also warten. Mit "WebDriverWait (Treiber, 30)). Bis" kann der Treiber bis zu 30 Sekunden warten.

In lambda a: len (driver.window_handles)> len (handle_befor) wird es in einer Zeile mit einem Lambda-Ausdruck beschrieben.

len (handle_befor) als die Anzahl der Handles vor dem Öffnen in einer neuen Registerkarte len (driver.window_handles) Das Warten wird abgebrochen, wenn die Anzahl der Handles den Moment überschreitet, in dem eine neue Registerkarte geöffnet wird.

sample.py


#Liste nach dem Klicken bearbeiten
handles_after = driver.window_handles

Ruft das Handle im Listenformat ab, nachdem die neue Registerkarte geöffnet wurde.

sample.py


#Listenunterschied behandeln
handle_new = list(handles_after - handles_befor)

Sie können den Unterschied erhalten, indem Sie die Liste mit - subtrahieren. Ich ordne es einer Variablen zu.

sample.py


#Gehen Sie zur neuen Registerkarte
driver.switch_to.window(handle_new[0])

Der Unterschied "handle_new [0]" wird zum Handle der neuen Registerkarte. Verschieben Sie ihn also mit "switch_to.window".

Bonus

Damit Sie jederzeit zurückkehren können, wenn Sie zu viele Registerkarten öffnen und nicht verstehen (Lass uns das nicht machen w)

Möglicherweise möchten Sie das aktuelle Handle im Voraus erhalten.

sample.py



#Aktuelles Fenster(Tab)Ersetzen Sie den Griff von
current_handle = driver.current_window_handle

#
#
#wird bearbeitet
#
#

#Aktuelles Fenster(Tab)Ziehen nach
driver.switch_to.window(current_handle)

Vielen Dank!

Recommended Posts

[Selen] Öffnen Sie den Link in einem neuen Tab und verschieben Sie ihn [Python / Chrome-Treiber]
[Python / Jupyter] Übersetzen Sie den Kommentar des in die Zwischenablage kopierten Programms und fügen Sie ihn in eine neue Zelle ein.
Was tun, wenn im Selenium Chrome-Treiber ein Versionsfehler auftritt?
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
[Selen] Drucken ohne Kopf- und Fußzeile (erzwungen) [Python / Chrome-Treiber]
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
So bestimmen Sie die Existenz eines Selenelements in Python
Neue Python-Grammatik und Funktionen, die im Einführungsbuch nicht erwähnt werden
Überprüfen und verschieben Sie das Verzeichnis in Python
[Python] Die Rolle des Sterns vor der Variablen. Teilen Sie den Eingabewert und weisen Sie ihn einer Variablen zu
Tipps zur Verwendung von Selen und Headless Chrome in einer CUI-Umgebung
Selen und Python zum Öffnen von Google
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Wenn Selenium sagt, dass die Chrome-Treiberversion anders ist (Python)
Schließen Sie das Cat-Ergebnis in doppelte Anführungszeichen ein und setzen Sie es in eine Variable
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Öffnen Sie eine Excel-Datei in Python und färben Sie die Karte von Japan
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Führen Sie den Python-Interpreter im Skript aus
Screenshots des Webfischens mit Selen und Chrom.
Suchen Sie es in der Warteschlange und bearbeiten Sie es
Python open und io.open sind gleich
Testen Sie das Hochladen von Bildern, indem Sie in Python erstellen, ohne Dummy-Bilddateien in Django zu platzieren
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Erweitertes Lernen 35 Python Lokale Entwicklung, fügen Sie einen Link zu myModule hinzu und importieren Sie ihn.
Machen Sie aus einem Python-Programm einen Daemon und führen Sie es automatisch aus, wenn das Betriebssystem gestartet wird
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Beachten Sie, dass ich den Algorithmus der kleinsten Quadrate verstehe. Und ich habe es in Python geschrieben.
Erstellen Sie ein Django-Projekt und eine Django-Anwendung in einer virtuellen Python-Umgebung und starten Sie den Server
Definieren Sie den Teilungswert in Django und spiegeln Sie ihn einfach auf dem Bildschirm wider
[Python] Lesen Sie automatisch Informationen der Präfektur des neuen Koronavirus aus dem PDF des Ministeriums für Gesundheit, Arbeit und Soziales und schreiben Sie sie in eine Tabelle oder in Excel.
Organisieren Sie Python-Module und -Pakete in einem Chaos
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Holen Sie sich den Aufrufer einer Funktion in Python
ffmpeg-Erstellen Sie eine Python-Umgebung und teilen Sie das Video
Ich habe eine Klasse in Python3 und Java geschrieben
Über den Unterschied zwischen "==" und "is" in Python
Schreiben wir ein Python-Programm und führen es aus
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Ausgabe in Form eines Python-Arrays
POST JSON mit Python und empfange mit PHP
[Python] Finden Sie die Translokationsmatrix in Einschlussnotation
Berücksichtigung der Stärken und Schwächen von Python
Python-Skript, das das Azure-Status-RSS crawlt und an Hipchat sendet
Wenn Sie eine Methode in einer Ruby-Klasse definieren und dann eine Methode darin definieren, wird sie zu einer Methode der ursprünglichen Klasse.
Automatisieren Sie das Entfernen des Hintergrunds für die neuesten Porträts in einem Verzeichnis mit Python und API
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Selenium-Screenshot ist nützlich für Screenshots von Webseiten in Python3, Selenium und Google Chrome
Mit Python + Selenium erhalten Sie Informationen, die der Registerkarte "Netzwerk" der Chrome-Entwicklertools entsprechen
[GCF + Python] So laden Sie Excel in GCS hoch und erstellen eine neue Tabelle in BigQuery
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Öffnen Sie die Seite im geheimen Modus, indem Sie die Browsersprache mit Selenium Python Bindings (Chrome) angeben.
Es scheint, dass eine neue Lotterie mit einer Gesamtpunktzahl in der Sportlotterie beginnen wird.
[Mac] Eine supereinfache Möglichkeit, Systembefehle in Python auszuführen und die Ergebnisse auszugeben