c# - 为什么在另一个线程/任务中调用 puppeteer 时会挂起
问题描述
我正在使用 puppeteersharp 进行一些刮擦。我想在不同的线程中操作页面,例如以定期间隔获取页面的 html(逻辑并不重要)。
每次我尝试在 Thread 中调用 puppeteer 时,都会在该行中堆栈执行。
在此示例代码中:
Browser _puppeteerBrowser = await PuppeteerSharp.Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = false,
ExecutablePath = _chromePath
});
Page Page = (await _puppeteerBrowser.PagesAsync()).FirstOrDefault();
var task = Task.Run(async () =>
{
var content = await Page.GetContentAsync(); // it never returns!!
System.Console.WriteLine(content.Length);
});
await Page.GoBackAsync(); // it works fine
task.Wait(); // never ends because of the stack inside the thread
我尝试了 Timer、Task、Thread 的不同变体,但每次我尝试在另一个线程中的 puppeteer 中做某事时,它都会挂起。我怎样才能解决这个问题?一般来说,如果我们想在不同的线程中使用相同的 Puppeteer(例如,也许我们想观察浏览器中的某些内容是否在“主流程”之外发生了变化)如何做到这一点?
解决方案
推荐阅读
- swift - transform.scale 上的 CABasicAnimation 在 X 和 Y 轴上平移 CAShapeLayer
- mysql - MySQL - 如何检查数据的连续性
- javascript - module-deps 无法解析相关的 require()
- python - 在python中反复将异步函数的返回值交还给自身
- c++ - 使用函数“what()”定义“(抽象)异常类”时出错
- apache - VirtualAlloc() 失败:[0x00000008] 在我的 Windows Server 2008 R2 中给出错误并停止我的 Apache 以获得高请求
- c# - ObservableCollection 如何添加 ObservableCollection?
- php - 为什么两次点击按钮时这个表单没有提交两次?
- python - 为什么 Django 给我一个 404 错误
- javascript - 不使用字符串方法 trim 删除空格