【问题标题】:How to change the value of a readonly input dropdown如何更改只读输入下拉列表的值
【发布时间】:2021-12-20 19:43:42
【问题描述】:
<input readonly="" value="7 days" style="cursor: pointer;">

这是下拉列表中唯一的 html(没有选择标签等),位于 div 中。

我想在我的 python/selenium 脚本中将值从“7 天”更改为“自定义日期”。 使用普通的输入标签,我会这样做:

date = driver.find_element_by_xpath('/html/body/.../div/input') 
date.send_keys('Custom date')

但是它不起作用,因为它是只读的。所以我尝试了这两个:

driver.execute_script("document.getElementsByTagName('input')[1].removeAttribute('readonly')")
#and send key
driver.execute_script("document.getElementsByTagName('input')[1].setAttribute('7 days', 'Custom Date')")

这也不起作用,所以我尝试模仿 TAB 和 ENTER 键:

date.send_keys(Keys.TAB)
date.send_keys(Keys.TAB)
date.send_keys(Keys.ENTER)

它从未执行过第二个 TAB,也没有按 ENTER。尽管如此,我认为这是我认为最好的选择,因为我在视频中看到它适用于某人。如果你能帮助我,我会非常高兴!

【问题讨论】:

  • 没有更多的html代码,很难帮助你..你有网址吗?原因:有很多方法可以做下拉
  • 你能在 HTML 中通过document.getElementsByTagName('input')[1] 唯一地定位元素吗?
  • 更好地显示此页面的问题 URL。它可能需要完全不同的解决方案。它可能会显示其他带有要选择的值的小部件,它可能需要使用find_element_by_xpath 找到它,然后使用send_keys
  • 现在知道了,谢谢!

标签: javascript python selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

好的,很抱歉缺少描述,感谢大家,Frenchy 的评论让我又找了几个小时,我发现了问题。

正如我之前在问题中所说,根本无法将值/键直接发送到该输入标签。因此,正如 Frenchy 建议的那样,一旦出现下拉菜单,我就进一步查看了 HTML 代码。

一旦下拉菜单出现,DOM 中就会出现一个 div。 appearing div 然后我复制了 xpath 并尝试单击跨度,但首先当我在我的普通 chrome 选项卡中检查元素时,我得到“消息:没有这样的元素:无法找到元素:”。然后我在我的自动 selenium 选项卡中做了同样的事情,它让我找到了正确的 xpath。我不知道这是什么原因(可能是你自己的错),但我认为这可能值得注意。

date = driver.find_element_by_xpath('/html/body/.../div/input')
date.click()
#dropdown appears 
customDate = driver.find_element_by_xpath('/html/body/...div/ul/li[4]/button/div/span')
customDate.click()

这现在很好用,也很有意义,应该早点看到出现的 div。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多