2

私は長い間、python(2.4)を使用してjavascriptWebページを解析して実行しようとしてきました。残念ながら、qt、webkitを使用できないため、Pythonベースのヘッドレスブラウザのほとんどが除外されています。しかし、私は最近、perlのWWW :: Scripter(perl 5.8.8を使用)を見つけました。これは、javascriptのスクリプトエンジンでもあるようです。また、実行に必要なjavascriptプラグインもインストールしました。

use WWW::Scripter;
$w = new WWW::Scripter;
$w->use_plugin('JavaScript');  # packaged separately
$w->get('some javascript website');
print $w->content;

まあそれはたくさんのエラーを出力し、最終的には終了し、出力はどこにも期待に近いようには見えません。私はこれを3〜4サイトで試しましたが、同じ結果になりました。期待される出力とは、GoogleChromeブラウザのinspect要素からわかるソースコードを意味します。私がperlスクリプターで何を間違っているのか考えていますか?第二に、JavaScriptエンジンを実行してpython2.4またはperl(またはruby、制約はqtを使用できない)を解析するための簡単な代替方法。多くのことを混乱させることなく問題を提示できることを願っています。

編集:エラーの最初の数行:

Day too big - 52263 > 24855
Sec too small - 52263 < 74752
Sec too big - 52263 > 11647
Day too big - 52263 > 24855
Sec too small - 52263 < 74752
Sec too big - 52263 > 11647
<></> at /usr/lib/perl5/site_perl/5.8.8/HTML/DOM/Element.pm line 320.
 at /usr/lib/perl5/site_perl/5.8.8/HTML/DOM/Element.pm line 320.
        HTML::DOM::Element::getAttribute('HTML::DOM::Element::Input=HASH(0xcc309f0)', 'checked') called at /usr/lib/perl5/site_perl/5.8.8/HTML/DOM/Element.pm line 379
        HTML::DOM::Element::_attr('HTML::DOM::Element::Input=HASH(0xcc309f0)', 'checked') called at /usr/lib/perl5/site_perl/5.8.8/HTML/DOM/Element/Form.pm line 965
        HTML::DOM::Element::Input::defaultChecked('HTML::DOM::Element::Input=HASH(0xcc309f0)') called at /usr/lib/perl5/site_perl/5.8.8/HTML/DOM/Element/Form.pm line 975
        HTML::DOM::Element::Input::checked('HTML::DOM::Element::Input=HASH(0xcc309f0)') called at /usr/lib/perl5/site_perl/5.8.8/JE.pm line 1719
        JE::__ANON__('JE::Object::Proxy=REF(0xcb53f44)', undef) called at /usr/lib/perl5/site_perl/5.8.8/JE/Object.pm line 385
        JE::Object::prop('JE::Object::Proxy=REF(0xcb53f44)', 'checked') called at /usr/lib/perl5/site_perl/5.8.8/JE/LValue.pm line 91
        JE::LValue::get('JE::LValue=ARRAY(0xcc4eac8)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1197
        JE::Code::Expression::eval('JE::Code::Expression=ARRAY(0xc5fa87c)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1377
        JE::Code::Expression::_eval_term('JE::Code::Expression=ARRAY(0xc5fa87c)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1150
        JE::Code::Expression::eval('JE::Code::Expression=ARRAY(0xc5fa78c)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 349
        JE::Code::Statement::eval('JE::Code::Statement=ARRAY(0xc5e50e8)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 186
        eval {...} called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 157
        JE::Code::execute('JE::Code=HASH(0xcb4a5c0)', 'WWW::Scripter::Plugin::JavaScript::JE=REF(0xa7c76e8)', 'JE::Scope=ARRAY(0xcb4fc7c)', 2) called at /usr/lib/perl5/site_perl/5.8.8/JE/Object/Function.pm line 486
        JE::Object::Function::apply('JE::Object::Function=REF(0xcb4aaac)', 'WWW::Scripter::Plugin::JavaScript::JE=REF(0xa7c76e8)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Object/Function.pm line 351
        JE::Object::Function::call('JE::Object::Function=REF(0xcb4aaac)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1287
        JE::Code::Expression::eval('JE::Code::Expression=ARRAY(0xc607808)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1377
        JE::Code::Expression::_eval_term('JE::Code::Expression=ARRAY(0xc607808)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1182
        JE::Code::Expression::eval('JE::Code::Expression=ARRAY(0xc5a0798)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1377
        JE::Code::Expression::_eval_term('JE::Code::Expression=ARRAY(0xc5a0798)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 1150
        JE::Code::Expression::eval('JE::Code::Expression=ARRAY(0xc5a0600)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 349
        JE::Code::Statement::eval('JE::Code::Statement=ARRAY(0xc3abbc0)') called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 186
        eval {...} called at /usr/lib/perl5/site_perl/5.8.8/JE/Code.pm line 157

ありがとう

4

1 に答える 1

1

何らかの用途がある場合: jsPhantom単一ファイルのヘッドレス Webkit (インストールなし) です。私はそれを数回使用し(exeをperlの隣に置くだけです)、動作させました。次のバージョン (1.9) (3 月/4 月?) では、パイピングを簡素化するために stdin を処理する予定です。

この回答の一時ファイルを介してPerlとPhantomJsの間で対話するコード例

于 2013-02-27T19:51:20.607 に答える