f# - 如何在 F# 中使用 Playwright Sharp 进行浏览器自动化

标签 f# playwright-sharp

我想这是一个经典的 C# 到 F# 的转换,我还没有完全理解。
我正在尝试使用快速入门自动化浏览器
https://playwright.dev/dotnet/docs/intro
C# 代码是

using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();
await page.GotoAsync("http://www.bing.com");
await page.ScreenshotAsync(path: outputFile);
我已经开始了,但已经有点迷失了。
let playwright: Playwright = PlaywrightSharp.Playwright.CreateAsync() |> Async.AwaitTask
类型不正确。我在这里做错了什么?
Error   FS0001  This expression was expected to have type
    'Playwright'    
but here has type
    'Async<IPlaywright>'    

最佳答案

一种方法是使用 F# 对 async computation expressions 的内置支持。 .翻译看起来像这样:

let (~~) = Async.AwaitTask

async {
    use! playwright = ~~Playwright.CreateAsync()
    let! browser = ~~playwright.Chromium.LaunchAsync()
    let! page = ~~browser.NewPageAsync()
    do! ~~page.GoToAsync("http://www.slashdot.com") |> Async.Ignore
    do! ~~page.ScreenshotAsync(outputFile) |> Async.Ignore
} |> Async.RunSynchronously
这里有一些你需要知道的微妙之处:
  • F# 有自己的异步类型,称为 Async<'T> .我用过 Async.AwaitTask从 C# 风格的任务转换而来,并定义了一个前缀运算符,~~ ,使这看起来更干净一些。
  • F# 不支持 DisposeAsyncasync计算表达式 yet ,因此浏览器不会被正确处理。如果需要,您可以添加 do! browser.DisposeAsync().AsTask() |> Async.AwaitTask在块的末尾手动执行此操作。
  • F# 要求我们明确忽略不需要的返回值,我已经通过 Async.Ignore 做到了这一点。 .
  • 关于f# - 如何在 F# 中使用 Playwright Sharp 进行浏览器自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67610586/

    相关文章:

    c# - 如何使用 Playwright 获得下拉列表的选定选项

    c# - 使用 Microsoft Playwright 在 Azure Function Linux 消费计划中创建本地 PDF 文件

    visual-studio - F# 中 main 模块末尾的数字零意味着什么

    f# 将二维数组展平为一维数组

    f# - 如何将字典条目的值声明为可变的?

    xml - 当文件具有 xmlns 属性时在 F# 中解析 xml

    c# - 在 .Net 中重定向标准输入和标准输出

    snapshot-testing - 如何格式化由Verify.PlayWright返回的HTML以便更好地比较