通过Perl脚本控制Google Chrome

时间:2016-09-14 13:27:36

标签: perl google-chrome

我一直在寻找一种方法来检查用户提供的特定网址的更改。我写了一个我在家里跑的脚本,可以使用WWW::Mechanize成功完成。问题是,我需要在另一个计算机网络中运行它,该计算机网络具有阻止所有$mech->get($url)请求的组策略(它不是防火墙问题,我让Perl通过),所以我认为我'通过让Perl控制Web浏览器来尝试解决这个问题。

网络中的计算机仅运行Google Chrome和IE8,由于其他政策(想到使用WWW::Mechanize::Firefox),我无法安装Firefox。我不想在脚本中调用IE8,因为将提供的大多数网址都是不适合使用它的网站,所以只留下了Chrome。

搜索可以执行此操作的模块,我只找到了AnyEvent::Chromi

  

通过websocket连接公开所有Chrome扩展程序API。

这不起作用(该策略可能也阻止了websocket)。

是否有其他方法可以解决此问题/从Perl脚本中控制Chrome?

3 个答案:

答案 0 :(得分:1)

由于您提到IE8,我假设您正在处理Windows系统。既然你提到你曾经考虑过WWW:Mechanix :: Firefox,听起来你并不仅限于核心模块。

基于此,我认为自动化Chrome浏览器的唯一方法是使用Win32::GuiTest来控制Chrome浏览器。如果你能弄清楚如何仅使用键盘输入(即没有鼠标)来手动驱动你的测试,那么比试图找出鼠标仿真以使光标到各种任务的正确位置更容易。

我不确定这是否是您想要使用的路线。这是我能想到的唯一方法来实现你想要处理的限制。

答案 1 :(得分:1)

您也可以在不使用任何CPAN模块的情况下从头开始。 我使用Unix Domain(UD)在Linux(Ubuntu 16.04,谷歌Chrome版本53)上测试了这个 插座。不幸的是,似乎Windows没有UD套接字,但是 应该可以使用命名管道从Windows执行相同操作。

首先,确保google-chrome在后​​台运行。我们会 需要创建一个将进行通信的Chrome App 通过native messaging API使用本机主机。该 本机主机可以是从STDINSTDOUT读取消息的任何脚本 通过google-chrome返回回复。我测试了两个Python 脚本和Perl脚本。

现在,为了让一个独立的Perl脚本与之通信 Chrome浏览器,它将通过UD套接字发送请求(由 本机主机)到本机主机;然后是本机主机 通过标准输出将请求转发给LOADING false 管。然后是Chrome应用程序(用JavaScript编写) 将收到请求。 Chrome应用将使用Chrome JavaScript API以获取请求的数据并将其返回到本机 主办。最后,本机主机通过套接字将结果转发给 Perl脚本。

正如您所看到的,设置它需要一些细节,但我可以 确认它在我的Linux平台上有效。如果您需要更多,请告诉我 的信息。

答案 2 :(得分:1)

是否有其他方法可以解决此问题/从 在Perl脚本中?

WWW::Mechanize::Chrome

像WWW :: Mechanize一样,此模块使用Perl对象自动进行Web浏览。通过启动浏览器实例并使用Chrome DevTools对其进行控制,将网页的获取和呈现委托给Chrome(或Chromium)浏览器。