【问题标题】:Cannot expand all the div in a page无法展开页面中的所有 div
【发布时间】:2026-01-10 18:20:03
【问题描述】:

我正在尝试扩展 this 页面内的所有可用 div。特别是显示mostra partite的div,例如:

查看 html 结构,我们有类:event__header--no-my-games 用于折叠的 div,所以我这样做了:

// page is the browser page
await page.WaitForSelectorAsync(".event"); // wait ajax completion
var divs = await page.QuerySelectorAllAsync(".event__header--no-my-games > .event__info");

foreach(var cd in divs)
{
   await cd.ClickAsync();
}

第一个问题是站点显示 7 个 div 已折叠,但我在 divs 变量上得到 20 个 div。另外,当我这样做时:

string html = await page.GetContentAsync();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

没有展开的div,我做错了什么?

【问题讨论】:

  • 当我使用Headless = false 启动浏览器时,您的代码对我有效。您是否尝试过截屏而不是获取 html?
  • @hardkoded 感谢您的回答,我使用了await page.ScreenshotAsync("screen.jpeg");,我可以看到所有的 div 都折叠了,不知道为什么它在你这边工作
  • @hardkoded 我尝试使用Headless = false 并且它有效,所以我猜是与Headless 模式有关的问题

标签: c# css google-chrome html-agility-pack puppeteer-sharp


【解决方案1】:

以下代码运行良好:

await page.WaitForSelectorAsync(".event"); // wait ajax completion
var divs = await page.QuerySelectorAllAsync(".event__header--no-my-games > .event__info");

foreach(var cd in divs)
{
   await cd.ClickAsync();
}

问题是Puppeteer 打开的浏览器具有移动维度,在这种情况下,我正在寻找的选择器是不同的。

我通过以下方式修复了声明 Viewport 大小的问题:

Browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
      Headless = true,
      ExecutablePath = "your chrome path",
      DefaultViewport = new ViewPortOptions { Height = 1280, Width = 800}
});

这将使用正确的选择器以桌面模式打开网站。

希望这对某人有所帮助。

【讨论】: