我一直在寻找一种方法来检查用户提供的特定网址的更改。我写了一个我在家里跑的脚本,可以使用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?
答案 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使用本机主机。该
本机主机可以是从STDIN
和STDOUT
读取消息的任何脚本
通过google-chrome
返回回复。我测试了两个Python
脚本和Perl脚本。
现在,为了让一个独立的Perl脚本与之通信
Chrome浏览器,它将通过UD套接字发送请求(由
本机主机)到本机主机;然后是本机主机
通过标准输出将请求转发给LOADING false
管。然后是Chrome应用程序(用JavaScript编写)
将收到请求。 Chrome应用将使用Chrome
JavaScript API以获取请求的数据并将其返回到本机
主办。最后,本机主机通过套接字将结果转发给
Perl脚本。
正如您所看到的,设置它需要一些细节,但我可以 确认它在我的Linux平台上有效。如果您需要更多,请告诉我 的信息。
答案 2 :(得分:1)
是否有其他方法可以解决此问题/从 在Perl脚本中?
像WWW :: Mechanize一样,此模块使用Perl对象自动进行Web浏览。通过启动浏览器实例并使用Chrome DevTools对其进行控制,将网页的获取和呈现委托给Chrome(或Chromium)浏览器。