Crawl4AI 动态点击实战:用 Session 会话与 JS 注入实现“Load More”内容加载

发布时间:2026/11/2 23:49:24

Crawl4AI 动态点击实战:用 Session 会话与 JS 注入实现“Load More”内容加载 Crawl4AI 动态点击实战用 Session 会话与 JS 注入实现“Load More”内容加载【免费下载链接】crawl4ai Crawl4AI: Open-source LLM Friendly Web Crawler Scraper. Dont be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai抓取动态网站时经常会遇到必须点击“Load More / Next”按钮才会加载新内容的页面。本文基于 Crawl4AI 官方教程 教程点击按钮加载更多内容完整讲解两种点击加载内容的实战方案——基于 Session 的分步调用方案与单次调用方案并结合仓库源码解释session_id、js_code、wait_for、js_only四个关键参数在 Crawl4AI 内部是如何落地的帮助你按需选择正确的动态内容抓取姿势。核心参数速览点击加载依赖哪四个参数两种方案都围绕crawler.arun()的以下参数展开理解它们的语义是后续实操的基础参数作用源码依据session_id保持同一个浏览器上下文Page BrowserContext跨多次arun()存活状态不丢失browser_manager.py 中按session_id复用已缓存的 context 与 pagejs_code在已加载页面的上下文中执行 JavaScript支持单个字符串或字符串列表async_crawler_strategy.py 中execute_js_code对str/List[str]分别处理列表则按顺序逐条执行wait_for等待某个条件成立再继续如新内容渲染完成支持css:/js:前缀async_crawler_strategy.py 中smart_wait的分发逻辑js_onlyTrue本次arun()不重新发起页面导航只执行 JS 并提取当前页面内容async_crawler_strategy.py 中if not config.js_only:才执行page.goto()否则直接跳过导航从源码结构看js_onlyTrue的意义正在于此策略层在config.js_only为真时完全跳过before_goto/page.goto()/after_goto导航流程async_crawler_strategy.py因此第二次arun()不会刷新页面此前点击产生的 DOM 变化得以保留——这是分步方案能够“累加内容”的前提。此外async_configs.py 对session_id的定义是“持久化浏览器上下文及已创建页面”async_configs.py 对js_only的定义是“后续调用属于 JS 驱动的更新而非整页加载”与本文两种方案的用法完全一致。方案一Session 分步调用逐步点击“Next”当页面需要“点一次 Next等一次新内容出现再点下一次”的节奏且每一步可能需要根据页面状态动态决策时使用session_id让多次arun()共享同一个浏览器上下文from crawl4ai import AsyncWebCrawler, CacheMode js_code [ # 这段 JS 找到 “Next” 按钮并点击 const nextButton document.querySelector(button.next); nextButton nextButton.click(); ] wait_for_condition css:.new-content-class async with AsyncWebCrawler(headlessTrue, verboseTrue) as crawler: # 1. 加载初始页面 result_initial await crawler.arun( urlhttps://example.com, cache_modeCacheMode.BYPASS, session_idmy_session ) # 2. 点击 Next 按钮并等待新内容出现 result_next await crawler.arun( urlhttps://example.com, session_idmy_session, js_codejs_code, wait_forwait_for_condition, js_onlyTrue, cache_modeCacheMode.BYPASS ) # result_next 现在包含点击 Next 之后更新过的 HTML关键要点来自官方教程并结合源码补充session_id保持同一个浏览器上下文开启。在 browser_manager.py 中BrowserManager维护一个self.sessions字典命中session_id时直接返回缓存的(context, page)并刷新其最后使用时间戳因此多次arun()落在同一个 Page 上首次调用后该会话在 browser_manager.py 中被登记保存。js_code在已加载页面的上下文中执行 JavaScript。策略层通过execute_js_codeasync_crawler_strategy.py执行若传入列表则按顺序逐条执行方便串联多步点击。wait_for确保爬虫等待到新内容完全加载再继续。css:.new-content-class这种css:前缀写法会走page.wait_for_selector()分支async_crawler_strategy.py。js_onlyTrue让本次arun()只跑 JS 不做整页导航避免刷新页面丢失已加载内容。cache_modeCacheMode.BYPASS绕过缓存保证每次拿到的都是真实点击后的最新页面快照。按此模式重复调用arun()可放在循环中并在每轮修改js_code例如点击不同的模块或不同的分页按钮即可迭代加载全部目标内容。该方案的典型适用场景是需要在点击下一分页之前动态检查页面条件例如判断按钮是否变为禁用、是否出现“没有更多”提示每一步都能拿到独立的CrawlResult做断言或落库。仓库中还有配套的会话管理示例 session_id_example.py以及更细粒度的页面交互教程见 page-interaction.md。会话生命周期提醒session_id对应的会话由BrowserManager管理可通过kill_session(session_id)显式关闭browser_manager.py在爬虫退出时管理器也会遍历self.sessions统一清理会话无需手动管理所有资源。方案二单次 arun 调用用一段 JS 完成全部点击如果交互序列事先已知例如页面结构固定、所有“模块卡片”一次性渲染在 DOM 中可以把点击循环整体封装进一段异步 IIFE在一次arun()内完成“点击 → 等待 → 再点”的全部动作最后再交给 Crawl4AI 做提取from crawl4ai import AsyncWebCrawler, CacheMode js_code [ # 点击多个模块的示例 JS (async () { const modules document.querySelectorAll(.module-item); for (let i 0; i modules.length; i) { modules[i].scrollIntoView(); // 触发懒加载 modules[i].click(); // 等待每个模块的内容加载100ms 可按实际网络情况调整 await new Promise(r setTimeout(r, 100)); } })(); ] async with AsyncWebCrawler(headlessTrue, verboseTrue) as crawler: result await crawler.arun( urlhttps://example.com, js_codejs_code, wait_forcss:.final-loaded-content-class, cache_modeCacheMode.BYPASS ) # result 包含所有模块被点击后的完整内容该 JS 片段做了四件事与官方教程一致遍历所有.module-item模块、逐个scrollIntoView()并click()、在每次点击之间用setTimeout等待内容更新、完成后把控制权交还给 Crawl4AI 进行提取。关键要点所有交互点击与等待都发生在提取之前外层wait_forcss:.final-loaded-content-class作为最终兜底确保最后一个模块的内容也渲染完毕后才进入内容提取阶段。从源码时序看arun()会在导航与wait_for之后再执行js_code执行点在 async_crawler_strategy.py 附近位于wait_for等待逻辑之后且 Crawl4AI 还提供js_code_before_wait钩子用于在wait_for检查之前先“触发”加载行为async_crawler_strategy.py——如果点击动作必须发生在等待条件检查之前可考虑使用它。适合交互序列完全固定、页面结构一致可预测的场景代码更简洁且只需一次网络往返即可完成整页的动态加载。两种方案怎么选官方教程给出的选择标准可以直接作为决策表使用维度分步方案Session 多次 arun单次调用方案一段 JS控制权粒度细粒度每步可检查运行时条件再决定是否继续一次性序列必须预先确定适用前提页面需要多个运行时条件判断如按钮状态、是否还有下一页交互序列事先已知、结构稳定代码复杂度需要维护session_id多轮调用代码更简洁单段 JS 即可结果获取每轮arun()返回独立的CrawlResult可逐步校验/落库只有一份最终CrawlResult典型场景无限滚动分页、需要登录态续存的连续翻页卡片全部在 DOM 中、只需批量展开/点击补充两条实操建议基于源码行为推断供参考优先用确定性的wait_for而不是固定sleep。分步方案中css:/js:前缀的等待条件由smart_wait精确等待选择器出现或 JS 表达式为真async_crawler_strategy.py比盲等更接近内容真实就绪的时机单次调用方案内部的setTimeout建议按目标站点的实际响应速度调整过短可能导致最后一个模块未加载完。动态页面记得绕过缓存。两种方案示例均显式传入cache_modeCacheMode.BYPASS避免因缓存命中拿到点击前的旧快照导致提取结果缺少动态内容。小结Crawl4AI 处理“点击加载”类动态内容提供了两条清晰路径分步方案用session_id保持浏览器上下文多次arun()渐进式点击配合js_onlyTrue避免整页刷新、wait_for保证每步内容就绪适合需要运行时判断的分页/滚动场景。单次方案把点击循环写进一段异步 JS在单次arun()内完成全部交互后再提取适合交互序列固定的场景。四条支撑线——session_id会话复用browser_manager.py、js_code页面上下文内执行 JSasync_crawler_strategy.py、wait_for条件等待async_crawler_strategy.py、js_only跳过导航async_crawler_strategy.py——共同构成了 Crawl4AI 处理动态点击内容的完整能力掌握它们即可覆盖大多数“Load More”场景。【免费下载链接】crawl4ai Crawl4AI: Open-source LLM Friendly Web Crawler Scraper. Dont be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/25 10:00:59

基于STM32的直流充电桩控制核心开发:从协议解析到安全监控

简介:本资源是一套基于STM32平台实现的直流充电桩嵌入式控制程序,面向计算机、自动化、电子信息、通信工程及人工智能等专业的在校学生、教师与初学者,适用于课程设计、毕业设计、项目立项演示及嵌入式进阶学习。代码经完整功能测试并成功运行…

2026/10/31 4:48:47

Arduino下SG90 360度连续旋转舵机实测:PWM控制与开环控制详解

刚入手 SG90 舵机时,我想做一个小型摇头云台,按网上的教程写 servo.write(90) 确实能转,但换成另一颗“SG90”后,角度却对不上,甚至出现“明明让舵机转 180,结果它自己转了一圈又一圈”的现象。后来才发现…

2026/11/2 23:44:38

C++实现LeetCode(769.可排序的最大块数)

前言 LeetCode 第 769 题「最多能完成排序的块」给一个长度为 n 的数组,它是 0 到 n-1 的一个排列。要求把数组切成尽量多的连续块,对每块单独排序后,按原顺序拼接起来,结果等于整个数组升序排列。 题目的关键约束是「排列」&…

2026/11/2 23:44:38

麒麟V10内存不释放排查:drop_caches定时回收脚本与边界

简介:面向银河麒麟V10服务器运维场景的轻量脚本包,聚焦系统长时间运行后内存不释放、可用内存逐步下降的问题,适合需要快速落地定时清理与日常巡检方案的中初级运维人员参考。压缩包仅2KB,共3个文件,由2个sh脚本和1个t…

2026/11/2 23:44:38

快递驿站分发系统毕业设计跑通指南:环境、状态机与并发核销避坑

简介:面向计算机专业毕业生与Java初学者,这份菜鸟驿站快递分发系统毕业设计压缩包提供了一套可运行的管理系统完整方案。系统围绕快递入库、分发与查询等业务展开,从需求分析、总体设计到详细设计均有对应实现,涵盖功能结构、数据…

2026/11/2 23:44:38

HJ212协议解析实战:Java+Netty自定义协议拆包与CRC16校验

简介:面向环保监测系统开发者的 HJ212 协议 Java 解析示例包,聚焦《污染源在线自动监控(监测)系统数据传输标准》的数据编解码与通信处理,适合需要快速理解协议结构、在项目中接入污染物数据采集与转换的初中级 Java 工…

2026/11/2 23:44:38

Apache Pulsar 2.9.1 部署实战:单机、集群、多租户与避坑

简介:Apache Pulsar 2.9.1 的官方二进制发行包(bin.tar.gz),面向需要在分布式环境中搭建消息中间件的后端开发、数据平台与运维人员,用于应对高吞吐实时消息传递、集群容错与云原生部署等场景,适合已具备一…

2026/11/2 23:39:38

2026-10-30|宠物店洗护预约总撞单?排班要过完的 5 道坎

title: 2026-10-28|宠物店洗护预约总撞单?排班要过完的 5 道坎 宠物店洗护预约总撞单?排班要过完的 5 道坎 宠物洗护撞单,根子不在前台记性差,而在三处结构缺陷:预约入口分散导致同一张表被四个人改、服务时…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑