2013-12-12 30 views
0

我要評估本網站上的JavaScript鏈接的頁面中的元素:評估只有JavaScript使用phantomjs

http://www.egypt.gov.eg

例如,我有這樣的元素:

<li class="language"> 
         <a id="ctl00_btnLang" href="javascript:__doPostBack('ctl00$btnLang','')">English </a> 
         <img src="/CSS/images/langArwEn.gif" alt="Language Arrow" /></li> 

所以,我試圖使用phantomjs來評估它,使用this code

var page = require('webpage').create(); 
var fs = require('fs'), 
    system = require('system'); 

page.open('http://www.egypt.gov.eg', function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
    } else { 
     var p = page.evaluate(function() { 
      return document.getElementsByID('html')[0].innerHTML 
     }); 
     fs.write('out.htm', p, 'w'); 
     console.log(p); 
    } 

    phantom.exit(); 
}); 

但它不評估HTML,它只是按原樣返回。那麼有沒有一種方法可以使用phantomjs來評估整個頁面的html,並且有沒有一種方法可以將JavaScript的各個元素逐一進行評估?

+1

我不太瞭解你的目的。你的意思是自動執行'__doPostBack'然後抓取頁面? – CodeColorist

+0

是的,這就是我基本上需要 – hmghaly

+0

和一般情況下,如果我在href中找到一段javascript,如何處理它以檢索它指向的頁面? – hmghaly

回答

0

第一個問題是,你是什麼意思,「評估」頁面上的JavaScript鏈接......你想讓PhantomJS點擊它們嗎?

文檔的頁面自動化在這裏:
http://phantomjs.org/page-automation.html

點擊此特定鏈接,你可以這樣做:

var page = require('webpage').create(); 

page.open('http://www.egypt.gov.eg', function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access network'); 
    } else { 
     var p = page.evaluate(function() { 
      document.getElementById('ctl00_btnLang').click() 
     }); 
    } 
    phantom.exit(); 
}); 

...但是這是要瀏覽器發送到一個新的網址我不確定在這種情況下你的PhantomJS頁面對象會發生什麼。

是否要單擊該頁面上的所有JavaScript鏈接並獲取每個加載的新HTML頁面的內容?

看起來這將是與CasperJS 容易「CasperJS是PhantomJS導航腳本&測試工具」
http://docs.casperjs.org/

看一看這裏的示例代碼擦傷,並遵循從數組鏈接的啓動網址:
https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js

+0

謝謝你指出casper,我會試試看 – hmghaly