在Selenium中绕过Python的只读HTML元素?

时间:2020-09-26 14:01:06

标签: javascript python selenium selenium-webdriver webdriver

我有一个任务正在尝试使用Python在selenium中自动化,其中包括选择一个日期。网站上的日期选择有一个输入框,当您选择该框时,它会下拉一个漂亮的标准日期表。

输入“文本”框设置为只读,我很难让Selenium查找我要它选择的日期,只需简单地将send_keys输入到输入框就可以了。实施起来容易得多。

经过研究,我在JS中找到了这个解决方案:

((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]", element, "my text to put in the value");

我可以在Python中使用类似的功能来实现相同的功能吗?

我不太熟悉Javascript,因此我的能力不允许我将其转换为Python。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

Selenium python中存在相同的功能,可以从驱动程序对象访问该功能:

driver.execute_script("arguments[0].value=arguments[1]", element, "my text to put in the value")

您说您不了解javascript,因此为您快速概述...

您要将3个变量传递给execute_script

  • 第一个是执行arguments[0].value=arguments[1]的js。查找2个输入参数。它将第一个输入的.value设置为第二个输入的值
  • element是您传入的下一个变量,是第一个js参数(argument[0]),是您已经确定的网络元素
  • "my text...blah"是第二个参数(argument[1]),是您要设置的字符串值

有关此方法和其他方法的更多信息,请参见python-selenium docs

执行脚本如下:

execute_script(script,* args)在 当前窗口/框架。

Args:脚本:要执行的JavaScript。 * args:JavaScript的所有适用参数。用法:driver.execute_script('return document.title;')

答案 1 :(得分:0)

Selenium 客户等效代码行将是:

driver.execute_script("arguments[0].value=arguments[1]", element, "my text to put in the value")

请注意, JavaScript 命令部分保持不变,并且仅方法名称根据绑定技术而有所不同,例如 Java Python < / em>, C#