Selenium-execute_async_script中未提供回调

时间:2019-04-16 01:13:24

标签: python-3.x selenium

我有以下代码,该异步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被记录为空数组。

这是怎么回事?

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

1 个答案:

答案 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