2013-02-27 29 views
1

我一直試圖解析和運行JavaScript網頁使用python(2.4)。不幸的是,我不能使用qt,webkit,所以大多數基於python的無頭瀏覽器都被排除了。然而,我最近在perl中發現了WWW :: Scripter(使用perl 5.8.8),這似乎也是javascript的腳本引擎。我還安裝了運行它所需的JavaScript插件。JavaScript引擎解析並運行Javascript網頁(perl/python)

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

那麼它打印很多很多的錯誤,並最終終止和輸出似乎沒有任何地方接近預期。我嘗試了3-4個網站,但結果相同。按照預期的輸出,我的意思是可以從谷歌Chrome瀏覽器的inspect元素中看到的源代碼。 任何想法我正在做錯perl腳本?其次,任何快速的替代方式獲得一個JavaScript引擎運行來解析網站在python2.4或perl(甚至紅寶石,約束不能使用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 

由於

+0

你得到什麼錯誤,Perl和PhantomJs之間相互作用的

代碼示例?爲什麼在世界上你使用了十多年前的Perl 5.8? – friedo 2013-02-27 17:35:34

+0

感謝您的回覆。我在一臺服務器機器上工作,因此升級需要很多請求:(儘管我已經發起了請求,但是在那之前我需要滿足於我的所有需求。當我在路透社上運行它時,我正在粘貼前幾行的錯誤網站。 – 2013-02-27 17:44:27

回答

1

在情況下,它可以是任何使用的:jsPhantom單個文件無頭的webkit(沒有安裝)。我多次使用它(只需將exe放在perl旁邊),然後將其運行。下一個版本(1.9)(3月/ 4月?)預計會處理stdin以簡化管道。通過臨時-文件This answer

+0

謝謝你似乎是一個非常好的選擇! – 2013-02-28 16:19:07