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

为什么我无法使用sendkey在文本框中输入文本?

如何解决为什么我无法使用sendkey在文本框中输入文本?

我正在尝试在以下网页上输入文本: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”。

这是我在运行上面列出的代码时收到的错误消息:'消息:没有这样的元素:无法找到元素:{“ method”:“ css选择器”,“ selector”:“。qs-ui- ipt qs-pageutil-input“}'

我看到大多数教程使用“ find_element_by_id”来运行此过程,但是网页上的元素没有与之关联的ID。我不确定是否需要ID来执行此过程,但我认为我也可以共享。我还尝试通过XPath和CSS选择器来找到该元素,但这没有用。

非常感谢所有帮助!

谢谢, 罗斯

解决方法

您不能将find_element_by_class_name用作复合类名称。 See this answer

,

使用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,"input.qs-ui-ipt.qs-pageutil-input"))).clear()
WebDriverWait(driver,"input.qs-ui-ipt.qs-pageutil-input"))).send_keys("2")

浏览器快照:

enter image description here

,

U可以使用WebDriverWaitCSS 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,'#ms-agreement > input'))).click()

#tries to clear text box at bottom right hand side of page
txtbox = WebDriverWait(browser,'#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)

希望这会有所帮助!

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