You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium场景下,如何在单会话多页面间保留JavaScript值?

解决Selenium多页面跳转后点击数据丢失的问题

我用Python+Selenium实现了一个功能:启动Chrome浏览器后,用户点击页面元素时,通过driver.execute_async_script执行的JavaScript脚本会捕获点击元素的outerHTML和整个DOM的outerHTML;按下ESC键时返回数据并关闭窗口。但遇到一个问题——用户在原页面点击后跳转新页面继续操作,原页面的点击数据会丢失,因为DOM更新后新脚本无法获取之前的数据。

之前尝试把array_events存入localStorage或sessionStorage但未成功,现在提供修正后的可直接使用的JavaScript代码,通过sessionStorage实现单会话内多页面间的数据留存:

//Callback function
var done = arguments[arguments.length - 1]; 
//从sessionStorage加载已有的事件数据,若无则初始化空数组
var array_events = JSON.parse(sessionStorage.getItem('clickEvents')) || [];

var saveToSessionStorage = () => {
    sessionStorage.setItem('clickEvents', JSON.stringify(array_events));
};

var registerOuterHtml = (e) => {
    array_events.push(e.target.outerHTML);
    saveToSessionStorage();
}
var whole = (e) => {
    array_events.push(document.documentElement.outerHTML);
    saveToSessionStorage();
}
var quit = (key) => {
    if(key.keyCode == 27){
        //返回数据后清空sessionStorage
        sessionStorage.removeItem('clickEvents');
        done(array_events);
    }
}
//页面卸载前保存数据
window.addEventListener('beforeunload', saveToSessionStorage);
// Listen to the clicks
document.addEventListener("click", registerOuterHtml, true);
document.addEventListener("click", whole, true);
// Listen to the key "esc" which means user has gathered all needed events
document.addEventListener("keydown", quit, true);

关键逻辑说明:

  • 脚本初始化时优先从sessionStorage读取已有的点击数据,无数据则创建空数组
  • 每次捕获到点击事件后,立即将数据同步保存到sessionStorage
  • 监听beforeunload事件,确保页面跳转或卸载前强制保存当前数据
  • 按下ESC键返回数据后,清空sessionStorage内容,避免影响后续会话

内容的提问来源于stack exchange,提问作者RifloSnake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:05:21