将值输入文本框而不是Python中的sendKeys()的Javascript

时间:2019-09-09 06:53:23

标签: javascript python selenium

我无法使用send_Keys()方法在当前正在运行的网站中输入值。 因此,我尝试使用javascript输入值。

在我决定使用JavaScript之前,我尝试过click()clear()以及send_keys(),但令我失望的是,它没有用。

我使用javascript代码在下面输入值

driver.execute_script("document.getElementById('CustCd').setAttribute('value', 'J590')")

它奏效了。

但是目前我的代码在循环内并且值发生了变化,我如何用获取值的变量替换J590

这是我尝试过的代码

ccr_No = XLUtlis.readData(path, 'ccr', r, 1)
driver.execute_script("document.getElementById('CCRNo').value=ccr_No")

我知道它的错,我们将不胜感激。我的Java语言很弱。

请注意,如果有人能够解决我的send_keys()错误。 该功能仅接受我发送的第一个字符。例如,send_keys("J590")给出Jsend_keys("J590-TE21")给出J-

3 个答案:

答案 0 :(得分:1)

您需要将变量作为变量而不是文字插入

value = 'J590'
driver.execute_script(f"document.getElementById('CustCd').setAttribute('value', '{value}')")

答案 1 :(得分:1)

首先,设置输入的 current 值的正确方法是将其分配给value属性。输入的当前值没有属性value属性是输入的默认more here)。

其余的是一个通用问题的特例:“如何将Python变量的值输出到JavaScript代码中?”

如果您要输出的字符串不包含引号或反斜杠,则可以避免使用格式字符串并在引号as Guy shows中输出值。 (JavaScript有两种引号,'";您只需要转义使用围绕该值的那种引号即可。)但是,这些类型的假设可能会分解。只要字符串为Hi, I'm Joe,该方法就会中断。

在一般情况下,为确保正确的转义并确保正确写入所有值,可以使用JSON:

import json
value = 'J590'
driver.execute_script(f"document.getElementById('CustCd').value = {json.dumps(value)};")

输出:

document.getElementById('CustCd').value = "J590";

Live Example

那样,您不必担心引号和转义,因为有效的JSON是有效的JavaScript(感谢最近的JavaScript规范修复;在此之前,人们几乎不兼容这种情况,所以一切都为您处理了)从来没有遇到过。)

它对于数字或您可能希望传递给JavaScript代码的更复杂的东西也很有用。例如:

import json

class Example:
    foo = ""
    bar = 0

    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

value = Example("I'm a string with \"quotes\" in it.", 42)
print(f"const obj = {json.dumps(value.__dict__)};")
num = 42
print(f"const num = {json.dumps(num)};")

输出:

const obj = {"foo": "I'm a string with \"quotes\" in it.", "bar": 42};
const num = 42;

obj最终成为一个对象,因为初始化程序是一个有效的JavaScript对象常量,其中包含来自Example对象的数据。同样,num是有效的JavaScript数字。

Live Example

答案 2 :(得分:0)

使用 JavaScript 输入变量的值,您可以使用以下解决方案:

ccr_No = XLUtlis.readData(path, 'ccr', r, 1)
# ccr_No = J590
driver.execute_script("document.getElementById('CCRNo').value='" + ccr_No + "';")

例如,要在 Google主页搜索框中输入变量的值:

  • 代码块:

    driver.get("https://www.google.com/")
    value = 'J590'
    driver.execute_script("document.getElementsByName('q')[0].value='" + value + "';")
    
  • 浏览器快照:

variable

  

您可以在Selenium : How to send variable character strings through executeScript()

中找到相关的讨论