WWW :: Mechanize :: Chrome Как закрыть вкладку - PullRequest
0 голосов
/ 21 сентября 2018

Я не могу понять, как закрыть вкладку при использовании 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

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Нет метода ->close_tab, потому что я пока не нашел в этом необходимости.

Объект "driver" - это объект Chrome :: DevToolsProtocol, который используется для непосредственного общения с Chrome,Слепой вызов случайных методов для случайных результатов методов рекомендуется здесь, в комментариях, но это не тот метод, который кажется плодотворным.

Если вы одержимы закрытием вкладки вместо того, чтобы $mechобъект выходит из области видимости, вы можете вызвать

$mech->driver->close_tab( $mech->tab )->get();

, но это нарушит дальнейшие действия, которые вы, возможно, сделали с $mech.->close_tab возвращает Future, поэтому вы не должны отбрасывать его вслепую.

Если вы просто не хотите, чтобы вкладка появлялась, рассматривали ли вы режим headless?

Этот вопрос был перекрестнымразмещены по адресу https://perlmonks.org/?node_id=1222776.

0 голосов
/ 21 сентября 2018

Существует метод close_tab в Chrome :: DevToolsProtocol , который является

асинхронным диспетчером для протокола DevTools

ине предлагает метод для создания объекта.

WWW :: Mechanize :: Chrome имеет метод драйвер , задокументированный как

Получите доступ к экземпляру Chrome :: DevToolsProtocol, подключающемуся к Chrome.

В случае, если это просто, возможно, $chrome->driver->close_tab может сделать это.

Существует также опция driver для его конструктора, описанного как

Предварительно созданный объект Chrome :: DevToolsProtocol.

без дополнительных подробностей. Обновление:.., Используя для этого требуется больше работы

Я не могу еще продолжать эти ключи, так как установка упорно терпит неудачу в конце, после того, как 54 установлены (пятьдесят четыре) распределения

1037 * Надеюсь, это поможет кому-то разобраться.

Обновление После принудительной установки я могу подтвердить обновление вопроса

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.

, которое, судя по коду, указанному в сообщении, похоже, обнаруживает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...