0

我創建了一個簡單的網頁抓取工具,通過使用phantomjs從網站抓取數據。當我使用querySelectorAll來獲取我想要的內容時,它不適用於我。這是我的整個代碼。PhantomJS querySelectorAll()。textcontent什麼都不返回

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

var url = 'https://www.google.com.kh/?gws_rd=cr,ssl&ei=iE7jV87UKsrF0gSDw4zAAg'; 

page.open(url, function(status){ 

    if(status === 'success'){ 

    var title = page.evaluate(function(){ 
     return document.querySelectorAll('.logo-subtext')[0].textContent; 
    }); 

    console.log(title); 
    } 
    phantom.exit(); 
}); 

請幫我解決這個問題。

真的很感謝。

回答

1

默認情況下,PhantomJS的虛擬屏幕尺寸爲400x300。

var page = require('webpage').create(); 
console.log(page.viewportSize.width); 
console.log(page.viewportSize.height); 

有跡象表明,利用這一說明,並代替您在桌面瀏覽器中看到的普通版,他們目前的HTML的移動,剝離版網站和CSS。但是,我們可以修復,通過設置所需的視口大小:

page.viewportSize = { width: 1280, height: 800 }; 

也有做的UserAgent嗅探,並根據該決定的網站。如果他們不知道您的瀏覽器,他們可以顯示移動版本是安全的,或者如果他們不想被刮,他們可以拒絕與PhantomJS的連接,因爲它誠實地聲明:

console.log(page.settings.userAgent); 

的Mozilla/5.0(Windows NT的6.1; WOW64)爲AppleWebKit/538.1(KHTML,例如Gecko)PhantomJS/2.1.1 Safari瀏覽器/ 538.1

但是,我們可以設置所需的用戶代理:

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0'; 

當處理這些脆弱的事情和網頁抓取時,你真的應該注意你可以得到的任何錯誤和系統消息。

因此,沒有PhantomJS腳本應該是沒有的onError和onConsoleMessage回調:

page.onError = function (msg, trace) { 
    var msgStack = ['ERROR: ' + msg]; 
    if (trace && trace.length) { 
     msgStack.push('TRACE:'); 
     trace.forEach(function(t) { 
     msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : '')); 
     }); 
    } 
    console.log(msgStack.join('\n')); 
}; 

page.onConsoleMessage = function (msg) { 
    console.log(msg); 
}; 

PhantomJS腳本調試的另一個重要技術正在截圖。 您確定PhantomJS能夠看到您在Chrome中看到的內容嗎?

page.render("google.com.png"); 

之前設置的用戶代理:

screenshot with native PhantomJS useragent

設置Firefox的用戶代理

after setting Firefox useragent