制作一个JavaScript代码(注入selenium)可以在页面重新加载后生存

时间:2014-03-17 23:18:32

标签: javascript python selenium

我正在使用selenium和JavaScript处理宏录制和播放系统。在某些时候,我运行一个JavaScript代码,基本上为所有window事件订阅一个新的偶数处理程序,并转储到localStorage一些事件数据,我将在稍后收集。问题是,当用户单击链接时,或者由于某些其他原因重新加载页面时,事件处理程序将丢失。到目前为止,所有数据仍然在localStorage,但我无法继续收集新数据。

我无法控制服务器,因此无法在页面源中插入代码。我只能使用selenium来控制浏览器,所以我所能做的就是在某些时候执行一些JavaScript来开始转储事件,稍后用一些JavaScript来恢复事件数据。根据我所知,用户可能正在浏览StackOverflow。

有解决方法吗?

PS:我使用selenium for python,如果重要的话。

2 个答案:

答案 0 :(得分:1)

如果使用代理,例如squid,则可以将其与ICAP *服务器集成,以在页面到达浏览器之前对其进行转换。这将允许任何页面在到达浏览器之前被更改,插入您的javascript。

Squid版本3或更高版本带有integrated ICAP server

*互联网内容适应协议 - 在RFC 3507

中定义

答案 1 :(得分:0)

我认为我有一个非常好的简单解决方案:

为了使注入最简单,您可以使用Gatejs SPDY/HTTP proxy并使用the injection gatejs opcode - 它可用于正向和反向代理。

Gatejs注入会尝试将HTML代码添加到HTML(text / html)类型的内容中。

使用注入的正向代理示例。

var serverConfig = function(bs) { return({
    hostname: "testServer0",
    runDir: "/tmp/gatejs",
    dataDir: "/path/to/dataDir",
    logDir: "/var/log/gatejs",

    http: {
        testInterface: {
            type: 'forward',
            port: 8080,
            pipeline: 'pipetest'
        },
    },
    pipeline: {
        pipetest: [
            ['injection', {
                 code: "<h1>w00t injection</h1>"
            }],
            ['proxyPass', { mode: 'host', timeout: 10 }]
        ],
    }
})};

MK -