我有以下代码,该异步Javascript执行时应等待2秒钟,然后调用回调。但是,由于某种原因,即使我发现的Selenium文档指出arguments[0]
也不是回调函数,execute_async_script
会自动将回调函数注入arguments
数组中。
driver.execute_async_script(f"""
function sleep(ms) {{
return new Promise(resolve => setTimeout(resolve, ms));
}}
async function test() {{
console.log("before 2")
await sleep(2000)
console.log("after 2")
console.log(arguments)
arguments[0]()
}}
test()
""")
arguments
被记录为空数组。
这是怎么回事?
答案 0 :(得分:0)
您需要将回调存储在执行的Javascript的开头,如下所示:
driver.execute_async_script(f"""
const cb = arguments[arguments.length - 1]
function sleep(ms) {{
return new Promise(resolve => setTimeout(resolve, ms));
}}
async function test() {{
console.log("before 2")
await sleep(2000)
console.log("after 2")
console.log(arguments)
cb()
}}
test()
""")
这是有道理的,因为arguments
是一个对象,该对象根据访问它的功能而变化。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments