【问题标题】:Input Field is Recognized by Selenium but Keys are not Being SentSelenium 可识别输入字段,但未发送密钥
【发布时间】:2019-06-27 12:57:50
【问题描述】:

Selenium 正在识别输入字段(使用 xpath 完成),但我无法向其发送任何键。没有错误,但我想写入键的文本没有显示在搜索框中。输入字段在几个 div 中并且在 iframe 中,但我很确定我已经处理好了。我可以做些什么来解决这个问题?

driver.implicitly_wait(20)
search = driver.find_element_by_xpath("/html/body/main/div/div/div/div[1]/div/div/div/div/div/div[2]/div/input")
search.send_keys("25%)")

Picture of HTML

输入字段没有ID,也没有类型,所以我不确定除了xpath之外如何找到它。

【问题讨论】:

  • 你把驱动切换到iframe了吗?
  • 是的,我做到了。我可以在 iframe 中选择其他内容,但由于某种原因,我无法在输入框中显示文本。
  • 请阅读为什么a screenshot of code is a bad idea。粘贴代码并正确格式化。
  • 你试过像div.search-input > input这样的CSS选择器吗?
  • 抱歉,我这样做是因为 html 深入许多部门。我将编辑我原来的问题。你的意思是我应该试试 find_element_by_css_selector("div.search-input")。这是我第一次尝试 Selenium,所以我有很多东西要学。我不确定你所说的“>”是什么意思

标签: python selenium rpa


【解决方案1】:

我不确定 Java 和 Python 之间的区别,但我的建议是您尝试使用 JavaScriptExecutor 输入密钥:

获取元素的 Python 代码:

search = driver.find_element_by_xpath("/html/body/main/div/div/div/div[1]/div/div/div/div/div/div[2]/div/input")

在 Java 中你基本上是这样传递元素的:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].value='<<Add your input String here>>';", search);

很多时候,它在 SendKeys 不工作时起作用

【讨论】:

    【解决方案2】:

    使用class定位div元素:

    search_div = driver.find_element_by_class_name("search-input")
    search = search_div.find_element_by_class_name("text")
    

    顺便说一句:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    klass = "search-input"
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CLASS_NAME, klass)))
    search_div = driver.find_element_by_class_name(klass)
    search = search_div.find_element_by_class_name("text")
    

    【讨论】:

    • 我试过这个并且得到一个错误说“元素不可交互”。我认为我不能将密钥发送到 div 本身?我以为我只能将键发送到输入字段,无论出于何种原因,这都不起作用。
    • 那仍然是 div……你需要在那个 div 里面输入
    • 是的,仍然收到相同的错误“元素不可交互”。这很奇怪,因为我的原始代码中没有输入错误,但文本没有显示在字段中
    • 对不起老兄,我之前读错了,你的 div 是“search-input”类,找到它之后,只需通过“text”类或“input”类型找到其中的元素.
    • 这是有道理的。您将如何编写代码来定位 div 字段内的输入元素?我还会使用 driver.find_element_by_class_name("text") 吗?
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2018-04-27
    • 2021-08-29
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2011-10-27
    相关资源
    最近更新 更多