【问题标题】:Selenium - Callback not provided in execute_async_scriptSelenium - execute_async_script 中未提供回调
【发布时间】:2019-09-06 00:40:50
【问题描述】:

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

发生了什么事?

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

【问题讨论】:

    标签: python-3.x selenium


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-22
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      相关资源
      最近更新 更多