Phantomjs通过python中的selenium

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)

有任何想法吗?

And*_*gee 2

据我所知,您需要修补 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