2014-07-01 102 views
6

我試圖測試網頁的行爲來自不同的推薦人的請求。我這樣做,到目前爲止以下Phantomjs通過python中的硒

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.referer'] = referer 

的問題是,該網頁有這將改變在HTML中,某些東西Ajax請求,而那些Ajax請求應該有作爲引薦網頁本身,而不是我給的引薦開始。似乎引用者在開始時被設置了一次,並且每個後續請求都是ajax或者image或者anchor使用同一個引用者,並且無論您瀏覽的內容有多深都不會改變,是否有解決方案來僅針對第一個請求選擇引用者併爲其餘的動態?

一些搜索後,我發現this,我試圖通過硒來實現它,但我還沒有與此有任何成功尚未:

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.onInitialized'] = """function() {page.customHeaders = {};};""" 

任何想法?

+0

埃文?我也有同樣的問題。 – norbertpy

+1

@norbertpy嘿,對不起,延遲。不,我記得沒有通過python管理這個。我不得不創建一個js腳本,同時用set referrer發起請求,我使用了一個名爲「oncomplete」(或類似的)的事件來將referer重置爲空字符串,並且工作正常。 如果你需要實際的腳本讓我知道。 – Evan

+1

@norbertpy下面的回覆對我來說太遲了,但看起來好像會起作用。你可以嘗試,如果你想保持一切(ISH)在蟒蛇。 – Evan

回答

2

從我可以告訴你需要補丁PhantomJS來實現這一點。

PhantomJS包含一個名爲GhostDriver的模塊,它提供WebDriver用來與PhantomJS實例進行通信的HTTP API。所以你想通過WebDriver完成的任何事情都需要GhostDriver的支持,但GhostDriver似乎並不支持onInitialized

如果你覺得喜歡冒險,你可以克隆PhantomJS repository並修補src/ghostdriver/session.js文件來做你想做的。

_init方法是這樣的:創建那裏page對象

page.onInitialized = function() { 
    page.customHeaders = {}; 
}; 

_init = function() { 
    var page; 

    // Ensure a Current Window is available, if it's found to be `null` 
    if (_currentWindowHandle === null) { 
     // Create the first Window/Page 
     page = require("webpage").create(); 
     // Decorate it with listeners and helpers 
     page = _decorateNewWindow(page); 
     // set session-specific CookieJar 
     page.cookieJar = _cookieJar; 
     // Make the new Window, the Current Window 
     _currentWindowHandle = page.windowHandle; 
     // Store by WindowHandle 
     _windows[_currentWindowHandle] = page; 
    } 
}, 

你可以嘗試使用你找到的代碼。

根據你測試的情況,儘管你可能會省下很多努力並丟掉瀏覽器,並直接使用類似requests模塊的東西來測試HTTP請求。