Cách thông thường để vượt qua các biến vào mã JavaScript bạn thực hiện thông qua Selenium là chỉ cần vượt qua các biến để execute_script
:
foo = "something"
driver.execute_script("""
var foo = arguments[0];
document.getElementById('text_field').value += foo;
""", foo)
Bạn lấy đối số ở phía bên Javascript qua arguments
object. Bạn có thể làm điều này vì mã bạn vượt qua để execute_script
được gói trong một chức năng vì vậy những gì được thực hiện là một cái gì đó như:
function() {
var foo = arguments[0];
document.getElementById('text_field').value += foo;
}
và hàm được gọi với các đối số được truyền cho execute_script
. Các đối số được sắp xếp tự động bởi Selenium.
Interpolating với .format
hoặc concatenating chuỗi nhiều cách mong manh để làm điều đó. Ví dụ nếu bạn làm 'var foo = "' + foo + '"'
này sẽ phá vỡ càng sớm càng biến foo
của bạn có một dấu nháy kép vào nó (cùng với 'var foo = "{0}"'.format(foo)
). Sử dụng json.dumps
đang xảy ra để tránh điều này và sẽ làm việc trong hầu hết các trường hợp, nhưng nó không chăm sóc một cái gì đó như thế này:
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.
""")
Selenium biết làm thế nào để chuyển đổi các Python đối tượng nó mang lại cho bạn khi bạn tìm thấy một đối tượng đến một DOM đối tượng ở phía JavaScript. json.dumps
không làm điều này.
Cảm ơn đã sửa @Jossef – Saifur