如何将Puppeteer自动滚动页面的函数转换为PuppeteerSharp实现?
PuppeteerSharp 自动滚动到页面底部实现代码
核心逻辑和原Puppeteer JS版完全一致,PuppeteerSharp的EvaluateExpressionAsync方法可以直接执行原有的页面JS逻辑,只需外层封装为C#异步方法即可:
using PuppeteerSharp; // 自动滚动方法 public async Task AutoScrollAsync(IPage page) { await page.EvaluateExpressionAsync(@" await new Promise((resolve, reject) => { var totalHeight = 0; var distance = 100; var timer = setInterval(() => { var scrollHeight = document.body.scrollHeight; window.scrollBy(0, distance); totalHeight += distance; if(totalHeight >= scrollHeight){ clearInterval(timer); resolve(); } }, 100); }); "); }
调用示例
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }); await using var page = await browser.NewPageAsync(); await page.GoToAsync("目标页面地址"); // 执行自动滚动 await AutoScrollAsync(page); // 滚动完成后可执行后续操作,比如截图、提取内容 await page.ScreenshotAsync("full-page.png");
注意事项
- 可以调整代码中的
distance参数修改每次滚动的像素距离,调整setInterval的第二个参数(默认100ms)修改滚动间隔,适配不同加载速度的页面 - 如果是无限加载的长列表页面,可以额外增加滚动后新内容高度变化的判断逻辑,避免提前停止滚动
- 如果页面滚动容器不是
document.body,需要把document.body.scrollHeight替换为对应容器的DOM节点属性
内容的提问来源于stack exchange,提问作者Harimanda Jerrys Randriamire
相关产品推荐
相关产品推荐

