NoSuchElementException и SyntaxError во время очистки веб-страниц

Sep 01 2020

У меня возникли трудности с применением этого предложения, чтобы исправить следующую ошибку:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./ancestor-or-self::form"}

получил, когда использую следующий код:

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()

Как объяснено здесь: NoSuchElementException - невозможно найти элемент , я должен использовать что-то вроде этого

WebDriverWait wait = new WebDriverWait(driver, 10);

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("source"));

Но я получаю SyntaxError (из-за WebDriverWait wait =).

Я также пытался следовать этим ответам:

NoSuchElementException (SyntaxError: слишком много статически вложенных блоков)

Selenium Webdriver - NoSuchElementExceptions

но я все еще получаю ошибки:

try:
    search = driver.find_element_by_css_selector('#source')

    break
except NoSuchElementException:
    time.sleep(1)

дает мне break outside the loop; тогда как это

try:
    search = driver.find_element_by_css_selector('#source')

except NoSuchElementException:         
    pass

ничего не меняет ( по- прежнему дает мне ошибку: NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./ancestor-or-self::form"})

Не могли бы вы помочь мне найти способ исправить эти ошибки?

Обновление: я также пытался использовать, driver.implicitly_wait(60)и у меня такая же NoSuchElementExpectionошибка.

Подробнее об ошибке:

---> 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(

Ответы

rahulrai Sep 02 2020 at 04:59

Вы сделали все , Райт в вашем коде разделяемого на вершине , кроме этой линии: search.submit(). Поскольку вы вызываете submit()метод веб-элемента, и определенный вами поиск элемента не является формой, а Textarea, следовательно, его сущностью NoSuchElementException. Потому что метод отправки применим только к formтипу элементов. Если вы удалите эту строку, ваш код будет работать нормально.

из 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)

Вывод

Заметка :

Чтобы узнать, как использовать разные механизмы ожидания в селеновом питоне, можно прочитать ниже:

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

ArundeepChohan Sep 02 2020 at 02:16
<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 может быть:

//*[@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

В основном дождитесь элемента, отправьте запрос и нажмите «Отправить».

search = WebDriverWait(driver, 10).until( 
        EC.presence_of_element_located((By.XPATH, //*[@id='source'])) 
search.send_keys(query)
search.submit()

Также добавьте эти

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC