NoSuchElementException dan SyntaxError selama web-scraping
Saya mengalami beberapa kesulitan dalam menerapkan saran ini untuk memperbaiki kesalahan berikut:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./ancestor-or-self::form"}
dapatkan ketika saya menggunakan kode berikut:
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()
Seperti yang dijelaskan di sini: NoSuchElementException - Tidak dapat menemukan elemen , saya harus menggunakan sesuatu seperti ini
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("source"));
Tapi saya mendapatkan SyntaxError (karena WebDriverWait wait =).
Saya juga mencoba mengikuti jawaban ini:
NoSuchElementException (SyntaxError: terlalu banyak blok bertingkat secara statis)
Selenium Webdriver - NoSuchElementExceptions
tapi saya masih mendapatkan kesalahan:
try:
search = driver.find_element_by_css_selector('#source')
break
except NoSuchElementException:
time.sleep(1)
memberi saya break outside the loop; sedangkan ini
try:
search = driver.find_element_by_css_selector('#source')
except NoSuchElementException:
pass
tidak mengubah apa pun (masih memberi saya kesalahan: NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"./ancestor-or-self::form"})
Bisakah Anda membantu saya menemukan cara untuk memperbaiki kesalahan ini?
Pembaruan: Saya juga mencoba menggunakan driver.implicitly_wait(60)dan saya mendapat NoSuchElementExpectionkesalahan yang sama .
Lebih detail tentang kesalahan:
---> 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(
Jawaban
Anda telah melakukan segalanya wright dalam kode Anda bersama di atas kecuali baris ini: search.submit(). Karena Anda memanggil submit()metode elemen web dan pencarian elemen yang Anda definisikan tidak ada bentuk melainkan an Textarea, maka NoSuchElementException. Karena metode submit hanya berlaku untuk formjenis elemen. Jika Anda menghapus baris ini, kode Anda akan berfungsi dengan baik.
dari 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)
Keluaran
Catatan :
Untuk mengetahui cara menggunakan mekanisme tunggu yang berbeda pada selenium python, di bawah ini bisa menjadi bacaan yang bagus:
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 bisa berupa:
//*[@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
Pada dasarnya tunggu elemen dan kirim kueri dan tekan kirim.
search = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, //*[@id='source']))
search.send_keys(query)
search.submit()
Tambahkan juga ini
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC