我是一名新的 Python 程式員。最近,我開始致力于自動化/抓取。目前,我陷入了單擊按鈕后出現頁面的情況,并且我無法在該頁面上找到元素。
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome(r"/Users/prateep/Downloads/chromedriver")
driver.get("https://example.com")
driver.maximize_window()
time.sleep(10)
button = driver.find_element_by_class_name("a-IRR-buttons")
button.click()
time.sleep(5)
driver.find_element("P52_NAME").send_keys("Test!!!")
selectStatus = Select(driver.find_element("P52_ASSESSMENT_STATUS_ID"))
selectStatus.select_by_value("O - Open")
driver.close()
輸出:-
driver.find_element_by_name("P52_NAME").send_keys("Test!!!")
Traceback (most recent call last):
File "/Users/prateep/Aegis_Automation/Aegis_Automation.py", line 25, in <module>
driver.find_element_by_name("P52_NAME").send_keys("Test!!!")
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 658, in find_element_by_name
return self.find_element(by=By.NAME, value=name)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 1238, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 418, in execute
self.error_handler.check_response(response)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="P52_NAME"]"}
uj5u.com熱心網友回復:
問題在這一行
driver.find_element("P52_NAME").send_keys("Test!!!")
你用find_element錯了。
讓我們看看我們find_element內部有什么
def find_element(self, by=By.ID, value=None):
"""
Find an element given a By strategy and locator. Prefer the find_element_by_* methods when
possible.
:Usage:
element = driver.find_element(By.ID, 'foo')
:rtype: WebElement
"""
if self.w3c:
if by == By.ID:
by = By.CSS_SELECTOR
value = '[id="%s"]' % value
elif by == By.TAG_NAME:
by = By.CSS_SELECTOR
elif by == By.CLASS_NAME:
by = By.CSS_SELECTOR
value = ".%s" % value
elif by == By.NAME:
by = By.CSS_SELECTOR
value = '[name="%s"]' % value
return self.execute(Command.FIND_ELEMENT, {
'using': by,
'value': value})['value']
如您所見,我們必須使用它
By.IDBy.CLASS_NAMEBy.TAG_NAMEBy.LINK_TEXTBy.PARTIAL_LINK_TEXTBy.NAMEBy.CSS_SELECTORBy.XPATH
如果P52_NAME是名稱并且它是唯一的并且代表 中所需的元素HTMLDOM,那么理想情況下您應該使用
driver.find_element(By.NAME, "P52_NAME").send_keys("Test!!!")
請檢查dev tools(谷歌瀏覽器)我們是否有唯一的條目HTML DOM。
檢查步驟:
Press F12 in Chrome- >去element節- >做一個CTRL F- >再貼上NAME看看,如果你需要的element是越來越強調與1/1匹配的節點。
更新:
wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "iframe xpath")))
wait.until(EC.visibility_of_element_located((By.ID, ""))).send_keys("")
進口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363270.html
