首页 > 解决方案 > WWW::Mechanize::Chrome 如何关闭标签

问题描述

在使用 WWW::Mechanize::Chrome 时,我似乎无法弄清楚如何关闭选项卡。

my $mech = WWW::Mechanize::Chrome->new();
$mech->get('https://www.google.com/');

没有$mech->close_tab()方法。

所以问题是,如何关闭当前正在使用的选项卡?

正如@zdim 所建议的

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

标签: perlgoogle-chrome

解决方案


Chrome::DevToolsProtocol中有一个close_tab方法,它是

DevTools 协议的异步调度程序

并且不提供实例化对象的方法。

WWW::Mechanize::Chrome的方法驱动程序记录为

访问连接到 Chrome 的 Chrome::DevToolsProtocol 实例。

在幸运的情况下,这很简单,也许$chrome->driver->close_tab可以做到。

它的构造函数还有一个选项driver,描述为

一个预制的 Chrome::DevToolsProtocol 对象。

没有进一步的细节。更新:使用它需要更多的工作

我还不能追查这些线索,因为在安装了 54 个(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;

这确实发出警告

在 .../Chrome/DevToolsProtocol.pm 第 567 行的 void 上下文中调用 ->catch。

从消息中引用的代码来看,这似乎暴露了一个错误。


推荐阅读