1

Selenium::Remote::Driverand Browsermob::Proxy を使用して http 要求パラメーターを取得しようとしています。擬似コードは以下の通りです。http ヘッダーを取得できませんでした。

どんな助けでも大歓迎です。

use Selenium::Remote::Driver;
use Data::Dumper;

my $proxy = Browsermob::Proxy->new(trace => 2);
my $driver = Selenium::Remote::Driver->new(
browser_name => 'firefox',
proxy        => $proxy->selenium_proxy(1)
);

$proxy->new_har( payload => {
        initialPageRef => '1' }, captureHeaders => 'true',
    captureContent => 'true',
    captureBinaryContent => 'true');

$driver->get('http://www.google.com/');
print Dumper($proxy->har);

アップデート:

  1. モジュール Net::HTTP::Spore::Role::Middleware は非推奨のメソッド (Class::MOP::load_class) を使用します。Class::Load::load_class に変更しました
  2. Selenium::Remote::Driver への引数 'httpProxy' は、URL スキームのない特定の IP アドレスでなければなりません。$proxy->selenium_proxy の場合、動作していません。

ただし、最初のリクエストしかキャプチャできませんでした。Selenium ドライブが行う後続の要求をキャプチャできませんでした。たとえば、次のコードは最初の GET リクエストのみをキャプチャし、2 番目のリクエストはキャプチャしません。

use Data::Dumper;
use Browsermob::Proxy;
use Selenium::Remote::Driver;

my $proxy = Browsermob::Proxy->new(
server_port => 8080,
);


$proxy->new_har( payload => {
        initialPageRef => 'payload is optional' }, captureHeaders => 'true',
    captureContent => 'true',
    captureBinaryContent => 'true', port => $proxy->port );

my $driver = Selenium::Remote::Driver->new(
browser_name => 'firefox',
proxy        =>  { 'proxyType' => 'manual', 'httpProxy' =>     '127.0.0.1:'.$proxy->port}, 
);
$driver->get('http://www.google.com/');
$driver->find_element("//input[\@name='q']")->send_keys("selenium");
$driver->find_element("//button[\@name='btnG']")->click;
print Dumper($proxy->har);
4

1 に答える 1

0

create_new_harの代わりに使用しnew_harます。

$proxy->create_new_har(
    payload => {
        initialPageRef => 'payload is optional'
    },
    captureHeaders => 'true',
    captureContent => 'true',
    captureBinaryContent => 'true'
);
于 2016-05-17T04:39:33.470 に答える