gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:38:42 24 4
gpt4 key购买 nike

我想这是一个经典的 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com