【问题标题】:How to pass a variable out of a lambda如何从 lambda 中传递一个变量
【发布时间】:2021-11-25 12:23:21
【问题描述】:
from playwright.sync_api import sync_playwright

url = "https://hls-js.netlify.app/demo/" 
with sync_playwright() as p: 

    browser = p.chromium.launch(channel = "chrome")
    page = browser.new_page() 
    page.on("response", lambda response: print(response.url) if (".m3u8" in response.url) else False) 
    page.goto(url) 
    page.wait_for_timeout(10*1000) 
    browser.close()

大家好,我需要在变量中传递“response.url”,以便在代码中进一步使用。我不想将 response.url 打印出来,我只想将该字符串保存在一个变量中。我该怎么做?

【问题讨论】:

  • 如果您使用的是 python 3.8 或更高版本,这可能有效:stackoverflow.com/a/14617232/6389787
  • 分配给事件的函数无法返回值 - 因此您可能必须将结果分配给全局变量,或者如果您想获取多个 url,则附加到全局列表。
  • 也许更好的解决方案是将其余代码放在此函数中,然后您不必在函数外部返回值。
  • @AshokArora 不完全一样,确实这些解决方案不适合我的代码

标签: python function lambda playwright


【解决方案1】:

分配给事件的函数(在任何模块中)不能返回值,您可能需要为此使用全局变量。但是lambda 不能使用global 也不能给变量赋值,所以它需要正常的功能

url = ""

def on_response(response):
    global url  # inform functio to use external variable (instead of local variable) when you use `=` to assign value
    
    if ".m3u8" in response.url:
        url = response.url

page.on("response", on_response) 

【讨论】:

  • 谢谢解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
  • 2021-01-17
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多