normalny sposób przekazać zmienne do kodu JavaScript wykonać przez Selen jest po prostu przekazać zmienne do execute_script
:
foo = "something"
driver.execute_script("""
var foo = arguments[0];
document.getElementById('text_field').value += foo;
""", foo)
można pobierać argument po stronie JavaScript przez arguments
object. Można to zrobić, ponieważ kod można przejść do execute_script
zapakowane jest w funkcję tak, co jest wykonywane jest coś takiego:
function() {
var foo = arguments[0];
document.getElementById('text_field').value += foo;
}
a funkcja nazywa się z argumentami, które zostały przekazane do execute_script
. Argumenty są szeregowane automatycznie przez Selenium.
Interpolowanie z .format
lub łączenie łańcuchów to delikatne sposoby na zrobienie tego. Na przykład, jeśli zrobisz 'var foo = "' + foo + '"'
, to pęknie, jak tylko twoja zmienna foo
ma podwójny cudzysłów (to samo z 'var foo = "{0}"'.format(foo)
). Korzystanie json.dumps
będzie uniknąć tego i będzie działać w większości przypadków, ale nie dbać o coś takiego:
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.
""")
Selen wie jak konwertować Python object to daje, gdy znajdziesz obiektu do DOM obiekt po stronie JavaScript. json.dumps
nie robi tego.
Dzięki za edycję @Jossef – Saifur