perl - 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
解决方案
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。
从消息中引用的代码来看,这似乎暴露了一个错误。
推荐阅读
- sql-server - SQL 语法 SELECT 和 Sub SELECT 和 JOIN
- python - Pandas read_html 产生带有元组列名的空 df
- json - AWS stepfunctions - 从 lambda 函数传递和读取变量
- javascript - 交错两个数组
- audio - 在moviepy中组合音频剪辑时的音频帧重复
- bash - 如何根据 awk/Bash 程序中的前两列加入两个大文件?
- css - 合并选择器@extend 问题
- android - MediaControllerCompat.Callback 仅用作字段
- google-apps-script - 将 ARRAYFORMULA 与 QUERY 或 INDEX 一起使用的替代方法
- c# - 如何更改/设置 3d 立方体点击区域?