Phantomjs通过python中的selenium

时间:2014-07-01 17:16:09

标签: python selenium phantomjs

我正在尝试测试网页对来自不同引荐来源的请求的行为。到目前为止,我正在做以下事情

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 = {};};"""

有什么想法吗?

1 个答案:

答案 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请求。