Il modo normale di passare delle variabili al codice JavaScript si esegue attraverso il selenio è di passare solo le variabili da execute_script
:
foo = "something"
driver.execute_script("""
var foo = arguments[0];
document.getElementById('text_field').value += foo;
""", foo)
si recupera il ragionamento sul lato JavaScript attraverso il arguments
object. Si può fare questo perché il codice si passa a execute_script
è avvolto in una funzione in modo da ciò che viene eseguito è qualcosa di simile:
function() {
var foo = arguments[0];
document.getElementById('text_field').value += foo;
}
e la funzione viene chiamata con gli argomenti che sono stati passati a execute_script
. Gli argomenti sono serializzati automaticamente da Selenium.
L'interpolazione con .format
o il concatenamento di stringhe sono modi fragili per farlo. Ad esempio, se lo fai, 'var foo = "' + foo + '"'
questo si interromperà non appena la tua variabile foo
avrà una doppia citazione (uguale a 'var foo = "{0}"'.format(foo)
). Utilizzando json.dumps
sta per evitare questo e funzionerà nella maggior parte dei casi, ma non prendersi cura di qualcosa di simile a questo:
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.
""")
selenio sa come convertire il Python oggetto ti dà quando si trova un oggetto a un DOM oggetto sul lato JavaScript. json.dumps
non lo fa.
Grazie per la modifica @Jossef – Saifur