我无法使用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")
给出J
,send_keys("J590-TE21")
给出J-
答案 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";
那样,您不必担心引号和转义,因为有效的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数字。
答案 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 + "';")
浏览器快照:
您可以在Selenium : How to send variable character strings through executeScript()
中找到相关的讨论