2017-01-15 79 views
0

我正在使用PhantomJS + wget在頁面上查看頁面內容(這是我的目標)。PhantomJS不工作在JavaScript頁面

這是我使用的命令:

$ phantomjs save_page.js http://wzdig.pbc.gov.cn:8080/dig/ui/advsearch.action > page.html 

beeing save_page.js

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

page.open(system.args[1], function() 
{ 
    console.log(page.content); 
    phantom.exit(); 
}); 

但是HTML顯示 「請開啓的JavaScript並刷新該頁」,這意味着 「執行Javascript」。

我在做什麼錯?

謝謝。

+0

而不是example.com你需要提供真實的網址 –

+2

對不起,我從一個例子複製。仍然沒有處理實際的頁面。 – Zaico

+1

爲什麼你提到wget如果它沒有被使用(至少在這裏) – Vaviloff

回答

1

請參閱更新線以下。

您的示例沒有工作的原因是棘手的目標頁面,測試頁面是否在可以執行javscript的真實瀏覽器中打開。第一次加載頁面時,您的瀏覽器會被賦予一個JavaScript來執行。然後第二次加載頁面顯示真實頁面。

但在您的示例中,腳本在首次加載頁面後立即退出。

一點點更好的解決方案,不依賴於3秒的超時(連接到中國網站通常很慢,我們不能100%肯定3秒就夠了)。

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

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

// Imitate a real browser 
page.viewportSize = { width: 1440, height: 900 }; 
page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"; 

// Called every time a page is loaded 
page.onLoadFinished = function(){ 

    // If the real page with search controls is loaded 
    // then get page.content and exit 
    var inputCount = page.evaluate(function(){ 
     return document.querySelectorAll(".jfk-textinput").length; 
    }); 

    if(inputCount > 0) { 
     console.log(page.content); 
     phantom.exit(); 
    } 

}; 

page.open(system.args[1]); 

UPDATE

好了,你的搜索結果後,很可能。在這種情況下,您可以更改決定在頁面加載到該解決方案的邏輯:

var inputCount = page.evaluate(function(){ 
    return document.querySelectorAll("h3").length; 
}); 

...因爲發現了文章的標題是輸出與<H3>標籤。

+0

'gov.cn'中的任何一個!我相信3秒延遲就夠了,但你的代碼也不錯! –

+1

@Igor您可能是對的,但我喜歡想象這個樣本可能會在未來的另一種情況下使用,因此我試圖讓它更耐用一點。你的解決方案也是很好的,因爲它更短,更直接。順便說一句,謝謝你的賞金,夥計! – Vaviloff

+0

感謝你和@Igor。但我一直在嘗試更改特定搜索的代碼,但它不起作用。我想我必須改變代碼:'return document.querySelectorAll(「。jfk-textinput」)。length;'例如搜索。但它陷入了思考,所以我認爲這不是正確的代碼。這是搜索:[http://wzdig.pbc.gov.cn:8080/dig/ui/search.action?hl=zh-CN&sr=score+desc&q=%E9%93%81&rp=&advepq=%E9% 93%81&advoq =&adveq =&ext =&advtime = 2&advrange = text%26title]我試着改變「.jfk-textinput」的值=「鐵」沒有成功。 – Zaico

2

您需要設置userAgent,這個腳本工作:

var page = require('webpage').create({viewportSize:{width: 1600,height: 900}, 
settings:{userAgent:'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0', 
javascriptEnabled:'true', 
loadImages:'false' 
}}); 
var system = require('system'); 

page.open(system.args[1], function(){ 
setTimeout(function(){ 
    console.log(page.content); 
    phantom.exit(); 
},3000); 
});