前几天给JManus提交了一个PR,就在刚刚被接受了,这篇文章分享一下这个PR修改的是什么。

这个PR修改的是#2170这个bug,这个bug是这样的:

意思是,playwright在下载浏览器时会直接下载3个浏览器,chrome、firefox、webkit。

playwright是一个自动化测试框架,可以通过代码(java、python、nodejs)来自动操作浏览器,你可以用它来做自动化测试、爬数据、RPA等。

而JManus,是一个AI Agent,所以提供了一个操作浏览器的工具,从而可以在解决用户问题时,通过自动操作浏览器来完成任务,比如通过浏览器打开百度,进行搜索,得到实时数据,而这个工具底层就是用的playwright。

但是,目前的问题是,在第一次使用playwright时,playwright需要下载浏览器,默认会下载3个,但是对于JManus而言,其实只需要一个就可以了,比如只需要chrome。

看到这,你可能会觉得,这个bug容易啊,讲道理,playwright这么成熟了,应该支持下载特定的浏览器了,如果这个bug非常容易,那么应该早就改了,但是实际这个bug是8月19号提出来的,已经有一个多月,如果我不改,可能还要等段时间才会被人改掉,所以它并没有想象中的那么容易。

当我们通过Java来使用playwright时,代码是这样的:

其中Playwright.create()就会下载3三个浏览器,然后你可以指定启动哪个浏览器,比如上面代码表示启动的是chrome浏览器,关键是,在这个create()方法中,并不支持指定下载某个特定的浏览器。

在playwright的官网中,确实也支持下载指定浏览器,但是,得通过mvn命令的方式:

运行以上命令,playwright就只会下载webkit浏览器。

但是,在JManus中,我们不可能要求使用者先单独执行一下这行命令,这样体验太不好了。

为了解决这个bug,我往下看了playwright的Java源码,发现源码底层的核心是一个叫做DriverJar

的类,这个类中的installBrowsers()方法就是负责下载浏览器的,而它下载浏览器的核心代码为:

其实就是开启一个进程,运行命令,进行浏览器的下载,因此要修改这个bug,其实只需要在"install"后面去指定特定的浏览器就可以了,比如"install chromium"。

思路是这个思路,关键是怎么改呢,看上面这个代码,人家也没有提供机制让你能在"install"后面添加其他的参数。

卡住了,这个bug,本质上需要playwright来优化,文章写完,我试着再去给playwright提交一个PR,让他直接支持install特定的浏览器。

想要看后续或更多精彩文章,可以关注我的公众号:IT周瑜。

那既然DriverJar本身没有扩展点,那就再看看源码,是不是有其他突破口,最后发现,DriverJar这个类的实例对象创建时,有一个扩展点:

代码还是很明显了,会从环境变量中读playwright.driver.impl配置,value是一个类名,如果没有配,默认就是DriverJar,然后创建对应的实例对象。

既然DriverJar改不了,那我就把它换了,因此我自己定义了一个ManusDriverJar,这个类继承了DriverJar,核心就是修改了installBrowsers()方法,现在这个方法是我自己定义的了,因此我想怎么改就怎么改了,第一步读取配置

然后最重要的就是在"install"后面增加参数:

这样,我们就可以通过配置来指定只下载某一个浏览器了,而不是下载3个。

最后,要使得我自己定义的ManusDriverJar生效,会在一些需要下载浏览器的地方,加上以下代码:

以上,就是这个PR的核心内容,官方也没有讨论,直接就合并了,因此这种方式应该也是目前最合适的修改方式了,对应的github链接:github.com/alibaba/spr…

最后,我想说,AI时代,出现了很多新的技术、新的框架,如果你错过了很多开源项目,那么现在出现了很多新的开源项目,都还不成熟,可以趁早加入进来,如果你感兴趣,可以加我微信讨论交流,同时我也在创业,专注做IT技术底层培训,如果你想跟着我提升技术实力,也可以咨询我(微信id:it_zhouyu),我是大都督周瑜,下篇文章见。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]