opencode使用

11 阅读6分钟

[TOC]

爬虫基础知识

爬虫有自己的编写流程和标准,有了标准,自然就有了框架,像Python这种生态强大的语言,框架自然是多不胜数,目前世面上用的比较多的有:

  • Scrapy

  • PySpider

  • Portia

bs4简介

即BeautifulSoup,是python的一个库,最主要的内容就是从网页中抓取数据。Beautiful Soup提供一些简单的、 python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时, Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Selenium

Selenium 是一个 Web 自动化测试工具,最初是为网站自动化测试而开发, Selenium 可以直接调用浏览器,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等。

网络驱动程序

selenium支持多种浏览器,比如Google Chrome、 Mozilla Firefox、 Internet Explorer、 Edge、Opera、 Safari 等。 一般配合 Chrome 浏览器使用 Selenium,所以我们还需要额外安装下ChromeDriver 和 Chrome 浏览器。

selenium官方教程

selenium-python.readthedocs.io/

Scrapy

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。

架构

  • Scrapy Engine

    引擎,负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。 此组件相当于爬虫的“大脑”,是整个爬虫的调度中心。

  • 调度器(Scheduler)

    调度器接收从引擎发送过来的request,并将他们入队,以便之后引擎请求他们时提供给引擎。初始的爬取URL和后续在页面中获取的待爬取的URL将放入调度器中,等待爬取。同时调度器会自动去除重复的URL(如果特定的URL不需要去重也可以通过设置实现,如post请求的URL)

  • 下载器(Downloader)

    下载器负责获取页面数据并提供给引擎,而后提供给spider。

  • Spiders爬虫Spider是编写的类,作用如下:Scrapy用户编写用于分析response并提取item(即获取到的item)额外跟进的URL,将额外跟进的URL提交给引擎,加入到Scheduler调度器中。将每个spider负责处理一个特定(或一些)网站。

  • Item Pipeline

    Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。

  • 下载器中间件(Downloader middlewares)

    简单讲就是自定义扩展下载功能的组件

  • Spider中间件(Spider middlewares)

    Spider中间件,是在引擎和Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items或requests)。 也提供了同样的简便机制,通过插入自定义代码来扩展Scrapy功能。

存储内容

scrapy保存信息的最简单的方法主要有四种, -o 输出指定格式的文件,命令如下:

scrapy crawl douban -o movie.json

csv 逗号表达式,可用Excel打开

scrapy crawl douban -o movie.csv

xml格式

scrapy crawl douban -o movie.xml

用AI编写爬虫工具并使用

目标网站:avd.aliyun.com/high-risk/l…

  • 给AI提供抓包信息和目标网站,让AI开始测试。

  • 结果发现目标网站具有很强的反爬虫机制,无法使用现有的自动检测工具,包括requests.Session()自动获取cookie,只能手动编写。

  • 接着让AI解析cookie信息来自动获取cookie,结果发现cookie信息太复杂,无法解析成功。

  • 最后给AI提供一个有效时间的cookie,结果测试发现该cookie只能用于当前页数,无法多页爬取。

  • 让AI生成该工具的skill,方便调用。

结果展示:

image-20260211130208824.png

利用AI编写httpx工具的skill

进入C:\Users\Administrator.agents\skills\目录下,输入:/skill,选择 skill-creator。

image-20260211141620595.png

告诉AI,httpx工具的readme文档的路径,并让AI编写httpx的skill

重新进一次opencode,输入/skill,就会有httpx这个skill:

image-20260211141831620.png

选择该skill,让AI识别 magedu.com 的指纹。

image-20260211141947687.png

利用AI编写AWVS扫描器调用工具

打开AWVS扫描工具

登录账号: admin@gkd.com / Oxgkd123

申请apikey

登录awvs后,可以点击administrator并申请api key

点击这个:

image-20260211143438838.png

申请API key:

image-20260211143504778.png

主要功能

主要实现以下功能

  1. 清空 AWVS Targets 列表所有目标

  2. 列出 AWVS Targets 列表所有目标

  3. 批量添加 url 至 AWVS Targets 列表,但不进行扫描

  4. 批量添加 url 至 AWVS Targets 列表,并进行主动扫描(可控制同时扫描的任务数量)

  5. 批量添加 url 至 AWVS Targets 列表,仅爬虫模式,联动 Xray 进行扫描(可控制同时扫描的任务数量)

过程坑点

首先,让 AI 实现最基础的功能:用API给 AWVS 传输扫描命令。

  • 坑点:这个功能其实非常简单,但有时候AI会抽风,写出的代码连不上AWVS

然后再让 AI 实现主要功能,这里推荐先实现简单的1 ~ 4 功能。

最后再让AI实现联动扫描功能。

  • 坑点1:Xray联动扫描的代理地址和浏览器代理不一样,命令也就不一样。

    xray_windows_amd64.exe webscan --listen 0.0.0.0:7001 --html-output awvs.html
    

    如果 Xray 不输入对的命令,AI 搞一天都搞不出来。

  • 坑点2:在利用AI编写快捷命令时,必须要保证你手动实现该操作时是成功的,不然 AI 也时白搞。

    所以需要手动复现一次AWVS和Xray联动。

最后的最后,让AI生成Readme文档和使用skill。

注意1:记得定时清理一下让 AI 清理一下淘汰掉的旧版本或测试文件,不然越堆越多。

注意2:要理解 AI 在干什么事,用硬知识控制 AI 的方向。当遇到 AI 无法判断错误时,注意检查是不是自己给的参数出了问题

结果展示:

普通添加多个扫描

image-20260211184231568.png

添加 Crawl Only 模式 + Xray代理

image-20260211222555341.png

添加 Full Scan 主动扫描 + Xray代理

image-20260211224949531.png

image-20260211222635204.png

skill使用:

image-20260211225529996.png

)

image-20260211225508162.png

Xray的skill创建

在上面的联动测试中,我发现在Xray中用127.0.0.1本机ip来跨虚拟机提供代理都失败了,所以我想出航建一个 skill,并把提供跨虚拟机提供代理时优先代理0.0.0.0地址加进skill里。

先在Xray目录下,提供给AI Xray的版本和官方使用说明,创建一份readme文档

image-20260212111726210.png

再把要求添加进去:

image-20260212111806415.png

再让AI在C:\Users\Administrator.agents\skills目录下创建skill

image-20260212111840446.png

重新进一次opencode即可看到该skill,尝试使用:

image-20260212112839222.png