使用WWW :: Mechanize :: Chrome时,我似乎不知道如何关闭标签页。
my $mech = WWW::Mechanize::Chrome->new();
$mech->get('https://www.google.com/');
没有$mech->close_tab()
方法。
问题是,如何关闭当前使用的标签?
my $driver = $mech->driver
似乎返回Chrome :: DevToolsProtocol实例。
然后,要关闭选项卡,您必须调用close_tab()函数并将当前选项卡作为参数传递:
$mech->driver->close_tab($mech->tab);
这种方法会产生以下错误,但是会关闭选项卡:
Calling ->catch in void context at C:/Perl64/site/lib/Chrome/DevToolsProtocol.pm line 567
答案 0 :(得分:1)
Chrome::DevToolsProtocol中有一个close_tab
方法,这是一个
用于DevTools协议的异步调度程序
并且不提供实例化对象的方法。
WWW::Mechanize::Chrome的方法driver记录为
访问连接到Chrome的Chrome :: DevToolsProtocol实例。
幸运的是,这很简单,也许$chrome->driver->close_tab
可以做到。
构造函数还有一个driver
选项,描述为
预制的Chrome :: DevToolsProtocol对象。
,没有更多详细信息。 更新:使用此功能需要做更多的工作。
由于安装了54(五十四)个发行版后,安装最终失败,我仍然无法找到这些线索。
希望这可以帮助某人找出答案。
更新 强制安装后,我可以确认问题更新
use warnings;
use strict;
...
my $chrome = WWW::Mechanize::Chrome->new(tab => undef); # new tab for demo
$chrome->get('https://www.google.com/');
sleep 5;
$chrome->driver->close_tab($chrome->tab);
sleep 5;
这会发出警告
Calling ->catch in void context at .../Chrome/DevToolsProtocol.pm line 567.根据消息中引用的代码判断的
似乎在暴露错误。
答案 1 :(得分:0)
尚无->close_tab
方法,因为我尚未发现需要它。
“驱动程序”对象是Chrome :: DevToolsProtocol对象,该对象用于与Chrome进行更直接的对话。在评论中建议在方法的随机结果上盲目调用随机方法,但这种方法似乎并不富有成效。
如果您迫不及待地希望关闭标签页而不是让$mech
对象超出范围,则可以调用
$mech->driver->close_tab( $mech->tab )->get();
但这会破坏您可能用$mech
完成的其他工作。 ->close_tab
返回一个Future,所以您不应盲目丢弃它。
如果仅不希望显示任何标签,是否考虑过headless
模式?
此问题交叉发布在https://perlmonks.org/?node_id=1222776上。