我正在使用selenium
和JavaScript处理宏录制和播放系统。在某些时候,我运行一个JavaScript代码,基本上为所有window
事件订阅一个新的偶数处理程序,并转储到localStorage
一些事件数据,我将在稍后收集。问题是,当用户单击链接时,或者由于某些其他原因重新加载页面时,事件处理程序将丢失。到目前为止,所有数据仍然在localStorage
,但我无法继续收集新数据。
我无法控制服务器,因此无法在页面源中插入代码。我只能使用selenium
来控制浏览器,所以我所能做的就是在某些时候执行一些JavaScript来开始转储事件,稍后用一些JavaScript来恢复事件数据。根据我所知,用户可能正在浏览StackOverflow。
有解决方法吗?
PS:我使用selenium for python
,如果重要的话。
答案 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 -