NoSuchElementException und SyntaxError beim Web-Scraping
Ich habe einige Schwierigkeiten, diesen Vorschlag anzuwenden, um den folgenden Fehler zu beheben:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./ancestor-or-self::form"}
bekam, wenn ich folgenden Code verwende:
from selenium import webdriver
query = ' I want to try to translate this text'
chrome_options = webdriver.ChromeOptions('/chromedriver')
driver = webdriver.Chrome()
driver.get('https://translate.google.com/')
search = driver.find_element_by_css_selector('#source')
search.send_keys(query)
search.submit()
Wie hier erklärt: NoSuchElementException - Element kann nicht gefunden werden , ich sollte so etwas verwenden
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("source"));
Aber ich bekomme einen SyntaxError (wegen WebDriverWait wait =).
Ich habe auch versucht, diesen Antworten zu folgen:
NoSuchElementException (SyntaxError: zu viele statisch verschachtelte Blöcke)
Selenium Webdriver - NoSuchElementExceptions
aber ich bekomme immer noch Fehler:
try:
search = driver.find_element_by_css_selector('#source')
break
except NoSuchElementException:
time.sleep(1)
gibt mir break outside the loop; während dies
try:
search = driver.find_element_by_css_selector('#source')
except NoSuchElementException:
pass
ändert nichts (noch gibt mir den Fehler: NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./ancestor-or-self::form"})
Könnten Sie mir bitte helfen, einen Weg zu finden, um diese Fehler zu beheben?
Update: Ich habe auch versucht zu verwenden driver.implicitly_wait(60)und ich habe den gleichen NoSuchElementExpectionFehler.
Weitere Details zum Fehler:
---> 23 search.submit()
24
25
~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py in submit(self)
83 """Submits a form."""
84 if self._w3c:
---> 85 form = self.find_element(By.XPATH, "./ancestor-or-self::form")
86 self._parent.execute_script(
Antworten
Sie haben alles richtig gemacht in Ihrem Code, der oben geteilt wurde, mit Ausnahme dieser Zeile : search.submit(). Wie Sie fordern submit()von Ihnen definierte Methode der Web - Element und Element - Suche ist keine Form vielmehr ihr ein Textarea, daher NoSuchElementException. Weil die Submit-Methode nur formfür Elementtypen gilt. Wenn Sie diese Zeile entfernen, funktioniert Ihr Code einwandfrei.
von Selen Import Webdriver
query = ' I want to try to translate this text'
chrome_options = webdriver.ChromeOptions('/chromedriver')
driver = webdriver.Chrome()
driver.get('https://translate.google.com/')
search = driver.find_element_by_css_selector('#source')
search.send_keys(query)
Ausgabe
Hinweis :
Im Folgenden erfahren Sie, wie Sie verschiedene Wartemechanismen in Selenpython verwenden können:
https://selenium-python.readthedocs.io/waits.html
<textarea id="source" class="orig tlid-source-text-input goog-textarea" rows="1" spellcheck="false" autocapitalize="off" autocomplete="off" autocorrect="off" style="overflow: auto hidden; box-sizing: border-box; height: 70px; padding-bottom: 18px;"></textarea>
Xpaths können entweder sein:
//*[@id='source']
/html/body/div[2]/div[2]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/div/div/div[1]/textarea
Warten Sie im Grunde auf ein Element und senden Sie die Abfrage und klicken Sie auf Senden.
search = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, //*[@id='source']))
search.send_keys(query)
search.submit()
Fügen Sie auch diese hinzu
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC