― Web Technology and Life ―

Selenium::Remote::Driver経由でPhantomJSのUserAgentを指定する方法

2013-10-08
PerlでSelenium2を使おうとするとSelenium::Remote::Driverになりまして、ブラウザにGUIでなくとも動いてくれるPhantomJSを使いたいのが貧乏環境でしてそのときのユーザーエージェントの指定方法Tipsです。

いざ、設定オプションをば

my $d = Selenium::Remote::Driver->new(
    remote_server_addr  => '127.0.0.1',
    port            => $port,
    extra_capabilities  => +{"phantomjs.page.settings.userAgent" => $ua },
);

簡単ですね。

どうやって動かすの?

phantomJSは公式サイトからリナックスのバイナリとか適当に落としてセットアップすれば簡単に使えるようになります。

そんで、以下のコードをたたけば一目瞭然!

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Selenium::Remote::Driver;
use Test::TCP;
use Proc::Guard 0.04 qw/proc_guard/;
use Plack::Loader;
use IPC::Cmd;

my $ua = $ARGV[0] || "my original user_agent input !!!";

my $phamtomjs_server = Test::TCP->new(
    code => sub {
        my $port = shift;
        #phantomjsのログがうざいので、IPC::Cmd::runで封じ込め
        IPC::Cmd::run( command => ['phantomjs', '--webdriver', $port], verbose => 0, buffer  => \my $buffer);
    },
);

my $app_server = Test::TCP->new(
    code => sub {
        my $port = shift;
        my $app = sub {
            my $env = shift;
            return [
                '200',
                [ 'Content-Type' => 'text/plain' ],
                [ $env->{HTTP_USER_AGENT} ],
            ];
        };


        my $loader = Plack::Loader->load(
            'Standalone',
            port => $port,
        );
        $loader->run($app);
    },
);

my $d = Selenium::Remote::Driver->new(
    remote_server_addr => '127.0.0.1',
    port => $phamtomjs_server->port,
    extra_capabilities  => +{"phantomjs.page.settings.userAgent" => $ua },
);

$d->get("http://localhost:".$app_server->port);

print $d->get_page_source()."\n";

undef $app_server;
undef $phamtomjs_server;

これを、phantomjs.plとして

[hirobanex@000-local-env]$ perl phantomjs.pl

とすると、以下のような結果がでます

<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">my original user_agent input !!!</pre></body></html>

plainにしているのに、なんか勝手に成形されていますが、目的達成です!!!

終わりに~もろもろ~

なんか、ubuntu10.04,ubuntu12.04の環境でperl 5.18.0にSelenium::Remote::Driver入れようとした入らなくて、かなり長い旅を行った。

結局、5.10.1で入れたけど、これはぼくの開発マシンのせい?

これで、ガラケー、スマホ、PCの簡易テストができる!!ガラケーはuidとか注意だし、スマホも結局JS周りのアクションはあやしかったりするけど、まぁ凝ったことしなければオッケーということで。BrowserSatckとか貧乏環境には無理だし、なおさらGUIのテスト環境も無理っす。(苦笑

とりあえず、もう眠いので目的のテストコードは明日以降に紡ごう。

Perl update_at : 2013-10-08T01:28:21
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus