【问题标题】:Phantomjs through selenium in pythonPhantomjs 通过 python 中的 selenium
【发布时间】:2014-07-01 17:16:09
【问题描述】:

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

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

问题是网页有 ajax 请求,这会改变 html 中的一些内容,这些 ajax 请求应该作为网页本身的引用者,而不是我一开始给出的引用者。似乎引用者在开始时设置了一次,并且每个后续请求(无论是 ajax 或图像还是锚点)都采用相同的引用者,并且无论您浏览多深,它都不会改变,是否有解决方案只为第一个请求选择引用者并让它保持动态?

经过一番搜索,我找到了this,我尝试通过 selenium 实现它,但我还没有取得任何成功:

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

有什么想法吗?

【问题讨论】:

  • 埃文好运吗?我也有同样的问题。
  • @norbertpy 嘿,抱歉耽搁了。不,我记得我没有通过 python 管理这个。我必须创建一个 js 脚本,并且在使用设置的引用者发起请求时,我使用了一个名为“oncomplete”(或类似的东西)的事件将引用者重置为空字符串并且有效。如果您需要实际的脚本,请告诉我。
  • @norbertpy 下面的回复对我来说来得太晚了,但它似乎会起作用。如果您想将所有内容(ish)保留在 python 中,您可以尝试这样做。

标签: python selenium phantomjs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2016-03-10
    • 2016-10-15
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多