为什么我不能使用 sendkeys 在文本框中输入文本?

Why am I not able to use sendkeys to enter text into textbox?

我正在尝试在此网页上输入文本:https://finra-markets.morningstar.com/BondCenter/BondTradeActivitySearchResult.jsp?ticker=C679131&startdate=10%2F03%2F2019&enddate=10%2F03%2F2020

这是我目前的代码

from selenium import webdriver

import os

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC



chrome_driver = os.path.abspath('C:/Users/ross/Desktop/chromedriver.exe')

browser = webdriver.Chrome(chrome_driver)

browser.get('https://finra-markets.morningstar.com/BondCenter/BondTradeActivitySearchResult.jsp?ticker=C679131&startdate=10%2F03%2F2019&enddate=10%2F03%2F2020')

#clicks agreement to morningstar's terms of service
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#ms-agreement > input'))).click()

#tries to clear text box at bottom right hand side of page
browser.find_element_by_class_name('qs-ui-ipt qs-pageutil-input').clear()

#tries to enter '2' in text box
browser.find_element_by_class_name('qs-ui-ipt qs-pageutil-input').send_keys(2)

我正在尝试在图表右下角的文本框中输入数字“2”。

这是我在 运行 上面列出的代码时收到的错误消息:'Message: no such element: Unable to locate element: {"method":"css selector","selector":".qs-ui-ipt qs-pageutil-input"}'

我看到大多数教程使用 'find_element_by_id' 到 运行 这个过程,但网页上的元素没有与之关联的 ID。我不确定我是否需要 ID 来执行此过程,但我想我不妨分享一下。我还尝试通过 XPath 和 CSS 选择器查找元素,但没有成功。

非常感谢任何帮助!

谢谢, 罗斯

你可以使用WebDriverWait & CSS Selector 来解决这个问题。这是完整的代码:

from selenium import webdriver

import os

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC



chrome_driver = os.path.abspath('C:/Users/ross/Desktop/chromedriver.exe')

browser = webdriver.Chrome(chrome_driver)

browser.get('https://finra-markets.morningstar.com/BondCenter/BondTradeActivitySearchResult.jsp?ticker=C679131&startdate=10%2F03%2F2019&enddate=10%2F03%2F2020')

#clicks agreement to morningstar's terms of service
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#ms-agreement > input'))).click()

#tries to clear text box at bottom right hand side of page
txtbox = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#ms-glossary > div > table > tfoot > tr > td > div > input'))) #Usage of CSS_SELECTOR instead of CLASS_NAME; usage of WebDriverWait

txtbox.click()

txtbox.clear()
#tries to enter '2' in text box
txtbox.send_keys(2)

希望对您有所帮助!

您不能将 find_element_by_class_name 用于复合 class 名称。 .

使用 WebDriverWait() 并等待 element_to_be_clickable() 和后面的 css 选择器 .

driver.get("https://finra-markets.morningstar.com/BondCenter/BondTradeActivitySearchResult.jsp?ticker=C679131&startdate=10%2F03%2F2019&enddate=10%2F03%2F2020")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.button_blue.agree"))).click()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.qs-ui-ipt.qs-pageutil-input"))).clear()
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.qs-ui-ipt.qs-pageutil-input"))).send_keys("2")

浏览器快照: