Web 自动化 Agent 完整教程,让 Agent 操作浏览器

更新日期: 2026-04-24 阅读: 12 标签: 自动化

Web 自动化 Agent 能做什么?

一旦让 AI 拥有操控浏览器的能力,就能自动帮你干活:
  • 数据采集:自动爬文章、商品、榜单、新闻
  • 表单填写:自动填报名表、问卷、注册信息
  • 自动化测试:模拟用户点按钮、填表单、测功能
  • 网页监控:定时查价格、查库存、查公告变化
  • 在线交互:自动预约、自动下单、自动签到
一句话:浏览器里人能干的重复事,Agent 都能自动干


浏览器控制神器:Playwright

由微软开发,是目前最强浏览器自动化工具,比 Selenium 好用太多。
对比:
  • 速度:更快,原生异步
  • 稳定性:自动等元素加载完,不报错
  • API:简洁好写,链式调用
  • 自带:截屏、录屏、多浏览器支持
安装命令:
pip install playwright
playwright install chromium

Playwright 基础操作(可直接运行)

Playwright 基础演示:打开网页 + 截图 + 读标题

from playwright.async_api import async_playwright
import asyncio

async def demo():
    async with async_playwright() as p:
        # 启动浏览器
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()

        # 进入网页
        await page.goto("https://example.com")

        # 截图
        await page.screenshot(path="example.png")

        # 读标题
        title = await page.title()
        print("网页标题:", title)

        await browser.close()

asyncio.run(demo())

Web Agent 核心架构:浏览器控制器

这是 Agent 的手脚,负责点、填、读、截、跳。
from playwright.async_api import async_playwright

class BrowserController:
    def __init__(self, headless=True):
        self.headless = headless
        self.browser = None
        self.context = None
        self.page = None

    async def start(self):
        # 启动浏览器
        self.playwright = await async_playwright()
        self.browser = await self.playwright.chromium.launch(headless=self.headless)
        self.context = await self.browser.new_context()
        self.page = await self.context.new_page()

    async def navigate(self, url):
        await self.page.goto(url, wait_until="networkidle")
        return await self.page.title()

    async def click(self, selector):
        await self.page.click(selector)
        await self.page.wait_for_load_state("networkidle")

    async def fill(self, selector, text):
        await self.page.fill(selector, text)

    async def get_text(self, selector):
        return await self.page.text_content(selector)

    async def extract_list(self, selector):
        # 提取列表数据
        elements = await self.page.query_selector_all(selector)
        return [await e.inner_text() for e in elements]

    async def screenshot(self, path):
        await self.page.screenshot(path=path)

    async def close(self):
        await self.browser.close()

智能元素定位:让 AI 看得懂网页

不用写复杂选择器,按文字、按钮、输入框、链接直接找。
class ElementFinder:
    def __init__(self, page):
        self.page = page

    async def find_by_text(self, text):
        return self.page.get_by_text(text)

    async def find_button(self, name):
        return self.page.get_by_role("button", name=name)

    async def find_input(self, label):
        return self.page.get_by_role("textbox", name=label)

    async def find_link(self, text):
        return self.page.get_by_role("link", name=text)

    async def page_info(self):
        # 返回页面标题+链接,给AI做判断
        return {
            "title": await self.page.title(),
            "url": self.page.url
        }

操作规划器:AI 大脑决定下一步做什么

AI 自动分析任务 → 决定点哪里、填什么、爬什么
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
import json

llm = ChatOpenAI(model="gpt-4", temperature=0)

planner = ChatPromptTemplate.from_messages([
    ("system", """你是浏览器自动化大师。根据任务输出下一步动作:
支持的操作:
- navigate(url)
- click(selector)
- fill(selector, text)
- wait(秒)
- get_text(selector)
- screenshot()
- done()

返回严格JSON格式:
{"action":"操作名","params":["参数"],"reason":"原因"}
"""),
    ("human", "任务:{task}\n当前页面:{page}\n历史:{history}")
]) | llm

实战:数据采集 Agent(修复可直接运行)

自动抓取技术博客文章,最常用、最实用
from playwright.async_api import async_playwright
import asyncio
from datetime import datetime

async def scrape_zhihu():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()

        await page.goto("https://www.zhihu.com")
        await page.wait_for_load_state("networkidle")

        articles = []
        items = await page.query_selector_all("div.ContentItem")

        for item in items[:10]:
            title_el = await item.query_selector("a.ContentItem-title")
            author_el = await item.query_selector("a.UserLink-link")

            if not title_el:
                continue

            title = await title_el.inner_text()
            url = await title_el.get_attribute("href")
            author = await author_el.inner_text() if author_el else "匿名"

            articles.append({
                "标题": title,
                "作者": author,
                "链接": url,
                "时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            })

        print("抓取完成:")
        for i, art in enumerate(articles, 1):
            print(f"{i}. {art['标题']} | {art['作者']}")

        await browser.close()
        return articles

asyncio.run(scrape_zhihu())

最佳实践(避坑必备)

  1. 不要用 time.sleep ()
    Playwright 会自动等待,手动等反而容易崩。
  2. 必须加异常处理
    网页变了、网断了,都要能继续跑。
  3. 控制速度
    爬太快会被封 IP。
  4. 验证码要人工介入
    遇到验证就让程序暂停,提示用户手动过一下。

总结

  • Playwright = 浏览器自动化最强工具
  • BrowserController = Agent 的手脚
  • ElementFinder = 让 AI 看懂网页
  • 操作规划器 = AI 大脑决定点哪里
  • 最终效果:AI 全自动操作浏览器,完成采集、填表、监控、交互等任务
来自:https://mp.weixin.qq.com/s/xumoNtTuWPw2EmDinRr0vA

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13704

相关推荐

十大最佳自动化测试工具

对更快交付高质量软件(或\\\\\\\"快速质量\\\\\\\")的需求要求组织以敏捷,持续集成(CI)和DevOps方法论来寻找解决方案。测试自动化是这些方面的重要组成部分。最新的《 2018-2019年世界质量报告》表明

mocha自动化测试程序:node.js测试框架Mocha源码分析

Mocha.js是被广泛使用的Javascript测试框架,在浏览器和Node环境都可以使用。Mocha提供TDD和BDD的测试接口。 Mocha提供了:断言单元测试,可以进行功能性测试,同步代码测试,异步代码测试

Web UI 自动化测试技术选型

对于 UI 自动化测试来说,许多所谓框架之间并没有太多差别,也从来不是影响整套测试用例是否健壮的关键性因素。相比之下,如何提高测试用例稳定性以及出现错误时 debug 的便捷性才是让 UI 自动化测试方案落地的重要细节。

理解前端自动化测试TDD + BDD

在日常的开发中,整天赶需求的我们好像没有时间顾及自动化测试,尤其是在敏捷开发的时候。但其实自动化测试可以帮助我们提高代码和功能的健壮程度,大幅减少可能出现的bug。尤其是在复杂系统中

前端赋能业务 - Node实现自动化部署平台

是否有很多人跟我一样有这样的一个烦恼,每天有写不完的需求、改不完的BUG,每天撸着重复、繁琐的业务代码,担心着自己的技术成长

什么时候需要自动化?

自动化是科技行业前进的方向,但它也是一把双刃剑。做对了,能够削减费用开销,减少维护工作;做错了,会让流程更加复杂,并增加预算。就像任何技术或流程一样,自动化在某些时候、某些地方是有效的,而在其他一些领域

使用require.context实现前端工程自动化

一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入

使用自动化时的五个常见错误

随着自动化扩展到涵盖 IT 的更多方面,越来越多的管理员正在学习自动化技能并应用它们来减轻他们的工作量。自动化可以减轻重复性任务的负担,并为基础设施增加一定程度的一致性

2026年浏览器自动化工具怎么选?从Selenium到AI驱动全解析

你还在用Selenium、ChromeDriver、Playwright做爬虫吗?2026年的数据出来了。Crawl4AI有62k星,Browser Use有78k星,Firecrawl有82k星。AI爬虫在GitHub上的热度已经全面超过了传统工具。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!