我正在尝试测试网页对来自不同引荐来源的请求的行为。到目前为止,我正在做以下事情
webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.referer'] = referer
问题是网页有ajax请求会改变html中的某些内容,而那些ajax请求应该具有网页本身的引用而不是我在开始时提供的引用。看起来referer在开始时被设置一次,并且每个后续请求都是ajax或者image或者anchor接受相同的referer,无论你浏览的深度如何,它都不会改变,是否有解决方案仅针对第一个请求选择referer并让其余的动态?
经过一番搜索,我找到了this,我试图通过硒实现它,但我还没有取得任何成功:
webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.onInitialized'] = """function() {page.customHeaders = {};};"""
有什么想法吗?
答案 0 :(得分:2)
据我所知,你需要修补PhantomJS来实现这一目标。
PhantomJS包含一个名为GhostDriver的模块,它提供WebDriver用于与PhantomJS实例通信的HTTP API。所以你想通过WebDriver做的事情需要得到GhostDriver的支持,但似乎GhostDriver不支持onInitialized
。
如果您喜欢冒险,可以克隆PhantomJS repository并修补src/ghostdriver/session.js文件以执行您想要的操作。
_init
方法如下所示:
_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;
}
},
您可以尝试使用找到的代码:
page.onInitialized = function() {
page.customHeaders = {};
};
在那里创建的page
对象上。
根据您测试的内容,您可以节省大量精力并放弃浏览器,直接使用requests
模块等方式测试HTTP请求。