[FIXED] Python Selenium – Verwenden von Try und except in einer Schleife zum automatisierten Lesen auf einer Website

Ausgabe

Ich versuche, einen automatischen Soundcloun-Player zu erstellen. Ich habe vor ein paar Tagen angefangen, Selen auf Python zu lernen, ich bin immer noch ein Anfänger. Ich möchte also eine Schleife erstellen, die funktioniert, wenn er die Seite betritt, auf “Ich akzeptiere” (für Cookies) klickt, dann die Leertaste drückt und nach 60 Sekunden aktualisiert

Hier ist der Code:

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from typing import KeysView
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome(executable_path="chromedriver.exe")

driver.implicitly_wait(17)

driver.get("https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjkk_fNxM_6AhXrgc4BHWcSCjoQFnoECAYQAQ&url=https%3A%2F%2Fsoundcloud.com%2Fuser-997915825%2Fpmh-ah-aah&usg=AOvVaw2vFzZHA4d8DH1r5GjZ6e4y")

try:
element = driver.find_element(By.ID, 'onetrust-accept-btn-handler')

action = ActionChains(driver)

action.click(on_element = element)

action.perform()

driver.implicitly_wait(33)

except NoSuchElementException:
ActionChains(driver).key_down(Keys.SPACE).key_up(Keys.SPACE).perform()


while True:
   sleep(60)
   driver.refresh()

Aber wenn ich try: then Except: NoSuchElementException einfüge, habe ich nicht einmal Zeit zum Dekompilieren, dass ich einen Fehler in den Zeilen erhalte wie: Try-Anweisung muss mindestens eine Ausnahme- oder Endgültig-Klausel haben. Pylance [Ln 17] Erwarteter Ausdruck. Pylanz [Ln 28]

Ich habe die richtigen Bibliotheken verwendet, denke ich:

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import NoSuchElementException

Und schließlich, wenn ich versuche, es auszuführen, habe ich diesen netten Fehler: SyntaxError: expected 'except' or 'finally' block.

Wenn ich versuche und außer wie folgt entferne:

 from selenium import webdriver
 from time import sleep
 from selenium.webdriver.common.action_chains import ActionChains
 from selenium.webdriver.common.by import By
 from selenium.webdriver.support.ui import WebDriverWait
 from selenium.webdriver.support import expected_conditions as EC
 from typing import KeysView
 from selenium.webdriver.common.keys import Keys
 from selenium.common.exceptions import NoSuchElementException

 driver = webdriver.Chrome(executable_path="chromedriver.exe")

 driver.implicitly_wait(17)

 driver.get("https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjkk_fNxM_6AhXrgc4BHWcSCjoQFnoECAYQAQ&url=https%3A%2F%2Fsoundcloud.com%2Fuser-997915825%2Fpmh-ah-aah&usg=AOvVaw2vFzZHA4d8DH1r5GjZ6e4y")

 element = driver.find_element(By.ID, 'onetrust-accept-btn-handler')

 action = ActionChains(driver)

 action.click(on_element = element)

 action.perform()

 driver.implicitly_wait(33)

 ActionChains(driver).key_down(Keys.SPACE).key_up(Keys.SPACE).perform()


 while True:
     sleep(60)
     driver.refresh()

Er betritt die Seite, klickt auf „Ich akzeptiere“ und drückt dann die LEERTASTE, um mit dem Lesen zu beginnen, aber wenn er aktualisiert, beginnt er nicht einmal mit dem Lesen, da er kein „Cookie-Akzeptanz“-Fenster mehr hat. Deshalb suche ich nach Bedingungen. Ich habe mehrere Threads dazu durchsucht, ich habe versucht, ihren Code zu verstehen, bevor ich ihn kopiert habe, aber bisher sind alle Methoden, die ich versucht habe, fehlgeschlagen und es ist bereits 2 Tage dauernd, dass es mich blockiert, meine Augen beginnen zu schmerzen. Wenn jemand eine Lösung für mein Problem finden kann, würde ich mich freuen. Ich werde froh sein und das Problem finden können, oder ich bin das Problem.

Danke für deine Korrektur, Prophet, hier ist der neue Code:

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from typing import KeysView
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome(executable_path="chromedriver.exe")

driver.get("https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjkk_fNxM_6AhXrgc4BHWcSCjoQFnoECAYQAQ&url=https%3A%2F%2Fsoundcloud.com%2Fuser-997915825%2Fpmh-ah-aah&usg=AOvVaw2vFzZHA4d8DH1r5GjZ6e4y")

try:
    element = driver.find_element(By.ID, 'onetrust-accept-btn-handler')

    action = ActionChains(driver)

    action.click(on_element = element)

    action.perform()

except NoSuchElementException:
  ActionChains(driver).key_down(Keys.SPACE).key_up(Keys.SPACE).perform()

while True:
    sleep(7)
    driver.refresh()

Lösung

Ihnen fehlt der Einzug.

Dies ist eine sehr grundlegende Python-Syntaxregel.


Der Code innerhalb
tryoder exceptjedem anderen Block sollte relativ zum vorherigen Code eingerückt sein.

Mit der Einrückung könnte Ihr Code so aussehen:

driver = webdriver.Chrome(executable_path="chromedriver.exe")

driver.implicitly_wait(17)

driver.get("https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjkk_fNxM_6AhXrgc4BHWcSCjoQFnoECAYQAQ&url=https%3A%2F%2Fsoundcloud.com%2Fuser-997915825%2Fpmh-ah-aah&usg=AOvVaw2vFzZHA4d8DH1r5GjZ6e4y")

try:
    element = driver.find_element(By.ID, 'onetrust-accept-btn-handler')

    action = ActionChains(driver)

    action.click(on_element = element)

    action.perform()

    driver.implicitly_wait(33)

except NoSuchElementException:
    ActionChains(driver).key_down(Keys.SPACE).key_up(Keys.SPACE).perform()

Außerdem driver.implicitly_wait(33) ist es kein Pausenbefehl.
driver.implicitly_waitwird einmal pro Sitzung festgelegt. Legt das Timeout fest, wie lange versucht wird, ein Element auf der Seite zu finden (zusammenzufassen).

Wenn Sie eine Pause machen möchten,
time.sleep()sollte dies verwendet, aber nicht empfohlen werden, da wir im Allgemeinen nicht empfehlen, fest codierte Pausen im Selenium-Code zu verwenden.


Beantwortet von –
Prophet


Antwort geprüft von –
Gilberto Lyons (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like