前些时间 cursor 的 composer 相当的火热,最近我也使用了下,对于简单的小项目的体验还不错。你在里面用自然语言输入你的需求,它就能自动帮你创建文件帮你写代码,然后我就用它做了一个浏览器插件来帮我就是爬取文章。就这里温馨提示一下就是你们要使用 cursor 的 composer 的话要提前去他的那个设置里面去打开一下,因为 cursor 是默认是关闭的。

Mac电脑就点左上角,然后点首选项,就点到那个 Cursor Settings,之后点击 features,然后看到 composer 那里,把它设置为 enabled。

那首先我们就打开一个文件夹或者说你可以去创建一个文件夹,然后一般来说它是基于你整个文件夹进行了一个索引,然后它最终的一个操作就是会基于你整个文件夹。所以你的文件夹里面就是最好不要包含过多的无关的东西,因为 AI 的这个上下文的长度是有限制的,所以它可能会影响你后续的交互效果。

我的需求很简单,首先我可以框选住需要让他获取的html的元素,然后他记住了我需要他获取的元素之后,我再给他一些相同网页结构的一些网址。之后他就模拟人为操作浏览器打开这个网址获取相应元素,然后清洗成纯文本保存成csv文件。

我们点击这个 command+i,这个是它的一个默认的一个快捷键,它就可以弹出在下方弹出一个 composer 的窗口。然后我们直接在那个聊天框里面输入自己的需求,他就会根据你的需求创建相应的文档,填写相应的文档的内容。创建好之后,我们点击 composer 的聊天框的下方显示的一个accept all,我们接受它。

首先我对于 HTML,CSS 还有 JavaScript这些语言我都不是很懂,所以就是遇到这些问题的时候感到很庆幸,这个项目不是一个很大的项目因此它的上下文足够Cursor能够去帮我解决掉其中的错误,最后通过不断的交互达到了最终的效果。一般来说,我就是无脑地 accept all,然后慢慢地把它调整到一个比较初步可用的一个效果。

每次你 accept all 的时候它就会自动保存你这个文件,然后你去这个Google Chrome 里面就加载这个文件夹,然后你就可以刷新你的网页,点击那个插件,它就会弹出弹窗了。

因为它不可能一下子就能帮你生成好你所需要的文件,最开始的时候可能多少都会有一点问题错误或者不满意的地方,我们再让它去调整的时候我们再 accept all,它就会更新你的文件并且自动保存。这个时候我们就必须要在 chrome 的扩展程序这里面点击这个扩展程序一个刷新按钮,刷新之后我们再去刷新网页让那个网页也能更新到最新的扩展程序,然后我们再继续调试。

但是前面几次我就会遇到一些问题,就比如说我点击开始选择元素的时候,鼠标移动到上面的时候我并不知道我是否已经真正的选择到了那个元素,所以我一开始让他加了一个就像网页开发者模式的选定元素,那样子有一个方框可以框住相应的元素的提示,说明我选中了那个元素。

其次,就是我点击了那个元素后,那个插件的那个弹窗它就会消失掉,所以后面我就让 cursor 把这个插件的弹窗单独改成了一个窗口,这样我点击左上角的红色叉叉它才会消失。还有一个比较重要的就是要确保所有的这个元素所有选中的元素最后都能够处理成一个纯文本的或者说处理成我们平时阅读的那种格式,至少没有 HTML 的元素。接下来就是批量添加网址的部分点加号可以添加,点减号可以删除网址。

这里就是我选择好元素,然后添加了网址点击开始处理后的窗口展示,这里我还添加了一个展示窗口,可以预览他获取的元素,最后我可以导出为 CSV 文件。

这里就是我导出之后的一个展示,然后我们可以看到这个文本还是比较清洗的还行。然后它其实会有几列掺杂了一些乱的符号进来,这可能就是未来需要优化的一个地方。不过这个程序是差不多半个小时就交互搓出来的,所以还算是比较满意,然后我们如果要进行比如说自然语言处理的时候就只用选定我们需要的列就行了,不需要的列它出现一些其他的符号也问题不大。

其实我们也可以用 Python 来写爬虫,首先虽然你写一个插件的时候与 cursor 的交流会有一些麻烦,但是相比于写代码还是比较简单的,毕竟是一劳永逸,而且相比于写代码的时候去理解网页结构写代码,还算是比较方便。还有一个好处就是它是模拟你的行为去获取这个网页,这样可以避免付费墙的问题,如果你的文章是有 paywall 的,那这个时候就是如果用Python的话你可能就得添加比如 head、cookies 之类的东西。如果你之前已经登录了你的账号,然后你已经付过费了或者说你通过一些其他的手段把这个付费墙给去除了,之后就可以直接获取他这个元素就不会有一个付费墙阻挡在那里了。

讲到模拟人的行为,我之前用到过一个python库叫做 selenium,但是你还得去理解网页结构,才能用Python能够很好去爬取这个网页。像我们这种小白,想要通过模拟人的行为,而不是纯代码的去爬取网页,之前我了解过叫RPA(Robotic Process Automation, 一种通过模拟人类在数字系统中的操作来自动化重复性、基于规则的任务的软件技术),但是这个可能也是要去学一下有一定的这个技术门槛然后具体我也还没有了解。

通过 Cursor 我就很简单的就能完成这么一个操作,当然 cursor 也会出现一个问题因为每一个网页它用的包装的手段也会不一样,有可能就很难去捕捉到它那个元素,然后把它给解析下来,而且解析的方法可能也会不一样,当然具体的我们也没有去探究。

因为网页的复杂性,你的这个扩展程序为了应对多种情况肯定要写的复杂点,它一旦到了那种复杂程度,对于我们这种没有基础的人去 debug 就很难。但如果单独用 Cursor 的话它就会很容易出错,比如说它解决了这个问题厚就会出现那个问题,然后把那个问题解决完之后它又出现了另一个问题,就很难去调整我就在想能不能再找到一个更简单的、小白都能用的一个方法。

那我想就是能不能有一个软件,能够单纯的记录我给它展示的步骤,比如说可以模仿我点击对应按钮,模仿我输入快捷键比如复制粘贴的操作,然后被这个软件给记录下来。最后在 setapp 的这个软件库里面找到了一个叫做 keysmith。

Keysmith 里面有一个 record, 它就可以记录一下我的操作,然后点击 run 它就可以来模拟重复我的操作,然后去实现一个相同的一个操作。在这个里面,你可以就是去设置可以让他重复多少次,然后你可以设置等待时间。我一般都会设置等待时间,因为如果你不等待的话你操作太快,这个 app 可能会崩溃。

开始的时候,我们点那个 record,比如说我要爬取某个网页,我首先肯定要点开 google chrome,你要确保你的每一个步骤都能确保你下一步要点击的东西都呈现在屏幕上,举个例子我们的爬取操作是要基于 google chrome 的,那么首先我们就要点开 google chrome,保证我们后面的操作能够在浏览器上进行。那首先在 record 中我就要点击那个 google chrome,因为我无法保证打开的python程序或者其他 app 挡住了 google chrome,所以我先点开google chrome。

目前我已经要把要爬取的网址给复制好了,所以我就只用输入 control+t 快捷键,让浏览器可以打开一个新的 tab,然后再用 control+v 把已经复制好的网址输入进去,最后我们再按一下 return。进入到那个网页后,一般情况下我们在这等一会儿,所以后面我们最好要在那个 keysmith 里面去添加一个 wait。因为我们打开页面要等浏览器加载完成,然后我们再去点 markdownload 插件,再点击 download 就能把那个给下载好。

我在这里还用到了一个浏览器插件叫做 markdownload,这个插件可以把你的这个网页给下载成一个 markdown 的格式,相当于自动帮你爬取下来这个网页,不过对于一些元素他可能就没有办法去解析到这个可能需要进一步的去探究一下。Markdownload 比较方便的就是你点击了之后,你直接点 download 他就可以直接帮你下载改网页为一个 md 格式的文件。

如果是批量下载网页,我目前还没有找到单纯用 keysmith 能够帮你去爬取的操作(也可能是探索还不够,我刚下载一天),因为它好像只是一个自动化的操作,并不是说只是为了去帮你爬虫,但是它可以设置快捷键,这个就很方便了,相当于提供了一个调用的 API 接口。那我们就可以借助 Python 了,就用 Python 写个简单的一个代码。

import pyperclip
import time
import pyautogui

# 1. 复制URL到剪贴板
url = "https://sspai.com/post/91127"
pyperclip.copy(url)
print(f"URL已复制到剪贴板: {url}")


# 2. 模拟按下快捷键
pyautogui.hotkey('ctrl', 's')
print("已模拟Ctrl+s快捷键")

print("操作完成!")

利用这个快捷键,我的思路是先让 Python 去把你要爬取的网页都放在一个 list 里面,然后用 for 循环每一次都进行一个复制,再用 Python 去模拟的点击快捷键,之后它就会运行。像我这里就是模拟按下了快捷键 Ctrl 和 s。因为在 Python 里面已经复制好了,所以可以直接在 keysmith 里面使用通用的粘贴键,换句话说它每次粘贴的都是你 python 里提前复制好的。

我本来想过用那个简悦的插件,但是它在模拟我点开的时候出错了,所以我就放弃使用这个插件。这样子的话就会多一个步骤,比如说我想把它保存到 notion 里面,因为简悦可以直接连接到 notion,但markdownload 就要你自己去导入进去,而且简悦还可以帮你把图片保存到图床里面,这样你就能把图片下载到自己的图床, 避免了图片外部不能访问的问题。