Eva*_*van 6 python selenium phantomjs
我试图测试网页的行为来自不同的引用者的请求.到目前为止,我正在做以下事情
webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.referer'] = referer
Run Code Online (Sandbox Code Playgroud)
问题是网页有ajax请求会改变html中的一些内容,而那些ajax请求应该具有网页本身的引用而不是我在开始时提供的引用.看起来referer在开始时被设置一次,并且每个后续请求都是ajax或者image或者anchor接受相同的referer,无论你浏览的深度如何,它都不会改变,是否有解决方案仅针对第一个请求选择referer并让其余的动态?
经过一番搜索,我发现了这个,我试图通过硒实现它,但我还没有取得任何成功:
webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.onInitialized'] = """function() {page.customHeaders = {};};"""
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
据我所知,您需要修补 PhantomJS 才能实现此目的。
PhantomJS 包含一个名为 GhostDriver 的模块,它提供 WebDriver 用于与 PhantomJS 实例通信的 HTTP API。所以你想通过WebDriver做的任何事情都需要GhostDriver的支持,但onInitializedGhostDriver似乎并不支持。
如果您喜欢冒险,您可以克隆PhantomJS 存储库并修补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;
}
},
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用您找到的代码:
page.onInitialized = function() {
page.customHeaders = {};
};
Run Code Online (Sandbox Code Playgroud)
在在那里创建的对象上page。
根据您测试的内容,您可能可以节省大量精力并放弃浏览器,而直接使用模块之类的东西来测试 HTTP 请求requests。
| 归档时间: |
|
| 查看次数: |
1310 次 |
| 最近记录: |