硒 - execute_async_script中未提供回调



我有以下代码,应该在这个异步Javascript执行时等待2秒钟,然后调用回调。但是,出于某种原因,arguments[0]不是回调,即使我发现的Selenium文档指出,通过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记录为空数组。

这是怎么回事?

硒文档:https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_WebDriver.html#executeAsyncScript

你需要在执行的 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

最新更新