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, sollte ich 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 (gibt mir immer noch 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, driver.implicitly_wait(60) zu verwenden und habe den gleichen NoSuchElementExpection Fehler.

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(
0
user12809368 2 Sept. 2020 im 01:19

2 Antworten

Beste Antwort

Sie haben alles richtig gemacht in Ihrem Code, der oben geteilt wurde, außer dieser Zeile: search.submit(). Während Sie die von Ihnen definierte submit() Methode der Webelement- und Elementsuche aufrufen, handelt es sich nicht um eine Form, sondern um eine Textarea, daher NoSuchElementException. Da die Submit-Methode nur für Elemente vom Typ form 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 Browseransicht der Ausgabe

Hinweis:

Im Folgenden erfahren Sie, wie Sie verschiedene Wartemechanismen in Selenpython verwenden können:

https://selenium-python.readthedocs.io/waits.html

0
rahul rai 2 Sept. 2020 im 04:59
<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 
0
arundeep chohan 2 Sept. 2020 im 02:16