簡體   English   中英

phantomJS如何從頁面加載后開始的JS腳本中獲取答案

[英]phantomJS how to get answer from JS scripts which starting after the page have loaded

我正在尋找該問題的解決方案。

該網站在頁面加載后加載了幾個JS腳本,它運行良好,該頁面從腳本中獲取響應並將其呈現到網站頁面。

但是腳本返回JSON,我想以JSON而不是從生成的頁面中獲得此響應。 使用腳本的答案比使用選擇器和循環從頁面獲取信息要快得多。

我嘗試使用page.onResourceReceived()但它只能獲取分析信息,文件名存儲量和響應大小;

如何獲得此回復的正文?

如果我正確理解了您的要求,則可以嘗試在網頁末尾使用window.callPhantom將數據作為對象傳遞,並通過PhantomJS范圍內的page.onCallback事件偵聽器接收數據。

http://phantomjs.org/api/webpage/handler/on-callback.html

摘抄:

當網頁上有JavaScript window.callPhantom調用時,將調用此回調。 傳遞給回調的唯一參數是數據對象。

注意:window.callPhantom仍然是實驗API。 在不久的將來,它可能會被基於消息的解決方案所取代,該解決方案仍將提供相同的功能。

盡管這種控制反轉有很多可能的用例,但到目前為止,主要的用例是防止需要PhantomJS腳本不斷輪詢網頁上的某些變量。

示例:WebPage(客戶端)

if (typeof window.callPhantom === 'function') {
    window.callPhantom({ hello: 'world' });
}

PhantomJS(服務器端)

page.onCallback = function(data) {
    console.log('CALLBACK: ' + JSON.stringify(data));  // Prints 'CALLBACK: { "hello":     "world" }'
};

此外,請注意,WebPage#onCallback處理程序可以返回一個數據對象,該對象也將作為原始window.callPhantom調用的結果而帶回。

例:

網頁(客戶端)

if (typeof window.callPhantom === 'function') {
    var status = window.callPhantom({ secret: 'ghostly' });
    alert(status);  // Will either print 'Accepted.' or 'DENIED!'
}

PhantomJS(服務器端)

page.onCallback = function(data) {
    if (data && data.secret && data.secret === 'ghostly') {
        return 'Accepted.';
    }
    return 'DENIED!';
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM