Car*_*elo 6 javascript python selenium webdriver
我一直在寻找一种使用selenium的webdriver访问不可见文本字段的方法.我得到它的唯一方法是使用
driver.execute_script("document.getElementById('text_field').value+='XYZ'")
Run Code Online (Sandbox Code Playgroud)
但是,XYZ我想使用python变量而不是使用.
将变量传递给通过Selenium执行的JavaScript代码的常规方法是将变量传递给execute_script:
foo = "something"
driver.execute_script("""
var foo = arguments[0];
document.getElementById('text_field').value += foo;
""", foo)
Run Code Online (Sandbox Code Playgroud)
您可以通过arguments对象在JavaScript端检索参数.你可以这样做,因为你传递给的代码execute_script包含在一个函数中,所以执行的是这样的:
function () {
var foo = arguments[0];
document.getElementById('text_field').value += foo;
}
Run Code Online (Sandbox Code Playgroud)
并使用传递给的参数调用该函数execute_script.参数由Selenium自动序列化.
插入.format或连接字符串是一种脆弱的方法.例如,如果你这样做'var foo = "' + foo + '"',一旦你的foo变量中有一个双引号就会中断(与之相同'var foo = "{0}"'.format(foo)).使用json.dumps是为了避免这种情况,并且在大多数情况下都可以使用,但它不会处理这样的事情:
el = driver.find_element(".something")
// Do stuff with el on the Python side.
driver.execute_script("""
var el = arguments[0];
// Do something with el on the JavaScript side.
""")
Run Code Online (Sandbox Code Playgroud)
当你在JavaScript端找到一个DOM对象的对象时,Selenium知道如何转换它给你的Python对象.json.dumps不这样做.
如果我正确理解问题,您将尝试传递 avar 而不是硬编码XYZ
driver.execute_script("document.getElementById('text_field').value+='" + var + "'");
Run Code Online (Sandbox Code Playgroud)