微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过python输入文本框:无法定位元素

如何解决通过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
    
  • 浏览器快照:

oxford


参考文献

您可以在以下位置找到一些关于 NoSuchElementException 的相关讨论:

,

非常接近,当所有其他方法都失败时尝试 XPath:

text_area = driver.find_element_by_xpath("//*[@id='qs-rankings']/thead/tr[3]/td[2]/div/input")

如果您正在检查网页的 html,您可以将完整/相对 XPath 复制到剪贴板。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。