【问题标题】:How to pass returned value from javascript async function to python variable如何将javascript异步函数的返回值传递给python变量
【发布时间】:2021-09-07 12:27:47
【问题描述】:
var = driver.execute_script("setTimeout(function(){ return [1,2,3]; }, 1000);")

使用Selenium 的函数execute_script,我正在尝试使用javascript 从网站中获取数据并将其传递给python 变量var,问题是javascript收集数据的代码大约需要 1 秒才能完成数据的收集(因为一些动画),所以当执行上面这行代码时,当时的正确值是 None(因为 javascript 代码没有' t 返回任何东西),但是,1 秒后,正确的值将更改为所需的数据,var 仍将是 None,因为这是分配给它的值。

请注意,这行代码运行良好,但这并不是我们真正需要的。

var = driver.execute_script("return [1,2,3];")

我有解决问题的办法,但我正在寻找更好的解决方案:

  1. 让javascript代码将数据下载到一个文件中,在time.sleep为python代码之后,让var从该文件中获取数据
  2. 类似1,让javascript代码将数据推送到网站某处,在time.sleep为python代码之后,让var从网站获取数据。
  3. 只使用原始的Selenium 代码,我不喜欢它,因为除了Selenium 的基础知识我不知道

【问题讨论】:

  • 我认为如果您使用原始 Selenium 显式等待,您将能够解决此问题。您问题的第三点
  • 你可以使用 async / await 来做到这一点。
  • @Invizi 你能解释一下吗

标签: javascript python selenium


【解决方案1】:

有一个python库asyncio可以让你在python中使用async await。

import asyncio
import request

async def do_task():
    response = await request("https://example.com")
    return response.text

如上所示,我们可以使用 await 告诉 python 在继续之前等待该值。

【讨论】:

  • 还是不行,我试过的代码在这里:codeshare.io/K8gZOo
  • 根据 selenium 文档的外观,您希望将 .execute_script 与 .execute_async_script 交换
猜你喜欢
  • 2020-12-09
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多