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.
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.
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".
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!