如何解决通过python输入文本框:无法定位元素
我正在尝试使用 python selenium 定位一个元素,并获得以下 html:
<input class="form-control" type="text" placeholder="University Search">
我找不到在哪里输入我想输入的内容。
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=r"D:\Python\Lib\site-packages\selenium\chromedriver.exe")
driver.get('https://www.topuniversities.com/university-rankings/university-subject-rankings/2020/engineering-technology')
#<input class="form-control" type="text" placeholder="University Search">
text_area = driver.find_element_by_name('University Search')
text_area.send_keys("oxford university")
解决方法
您正在尝试使用 find_element_by_name,但该元素没有定义 name
属性。您需要查找具有您感兴趣的特定 placeholder
属性的元素 - 您可以为此使用 find_element_by_xpath:
text_area = driver.find_element_by_xpath("//input[@placeholder='University Search']")
另外:当我打开浏览器时,我在占位符中没有看到带有“University Search”的元素,只有一个带有“Site Search”的搜索栏——但这可能是区域和/或浏览器的差异.
,确保使用 webdriver waits 等待页面加载,单击弹出窗口,然后继续定位要向其发送密钥的元素。
driver.get('https://www.topuniversities.com/university-rankings/university-subject-rankings/2020/engineering-technology')
driver.maximize_window()
wait=WebDriverWait(driver,10)
wait.until(EC.element_to_be_clickable((By.XPATH,"//button[text()='OK,I agree']"))).click()
text_area=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"td.uni-search.uni.sorting_disabled > div > input")))
text_area.send_keys("oxford university")
进口
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
要定位的元素
<input class="form-control" type="text" placeholder="University Search">
,
要将字符序列发送到元素,您可以使用以下任一Locator Strategies:
-
使用
css_selector
:driver.find_element_by_css_selector("input.form-control[placeholder='University search']").send_keys("oxford university")
-
使用
xpath
:driver.find_element_by_xpath("//input[@class='form-control' and @placeholder='University search']").send_keys("oxford university")
理想情况下,要将字符序列发送到您需要为 element_to_be_clickable()
引入 WebDriverWait 的元素,您可以使用以下任一 Locator Strategies:
-
使用
CSS_SELECTOR
:driver.get("https://www.topuniversities.com/university-rankings/university-subject-rankings/2020/engineering-technology") WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.form-control[placeholder='University search']"))).send_keys("oxford university")
-
使用
XPATH
:driver.get("https://www.topuniversities.com/university-rankings/university-subject-rankings/2020/engineering-technology") WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//input[@class='form-control' and @placeholder='University search']"))).send_keys("oxford university")
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
-
浏览器快照:
参考文献
您可以在以下位置找到一些关于 NoSuchElementException 的相关讨论:
- selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element while trying to click Next button with selenium
- selenium in python : NoSuchElementException: Message: no such element: Unable to locate element
非常接近,当所有其他方法都失败时尝试 XPath:
text_area = driver.find_element_by_xpath("//*[@id='qs-rankings']/thead/tr[3]/td[2]/div/input")
如果您正在检查网页的 html,您可以将完整/相对 XPath 复制到剪贴板。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。