内网IP调整引发的Chrome历史记录修改及ShadowRoot的学习

由于IP经常变动, 导致本地项目的那些存在地址栏的历史记录就都失效了, 突然脑洞大开, 有没有办法修改本地历史记录的方法?

想法是: 假设我原IP是192.168.1.51, 新IP是192.168.1.63, 我历史记录有http://192.168.1.51:8080/test.html, 我通过某种办法强行修改Chrome历史记录将192.168.1.51替换成192.168.1.63, 这样, 下次在地址栏输入test, 他就能自动填充http://192.168.1.63:8080/test.html了.

现实是残酷的, Chrome软件的历史记录貌似是二进制文件, 也可能是出于安全考虑. 为了快速解决问题, 我就不打算去研究如何修改二进制文件了.

于是改了host, 映射了一个Ip到本地域名, 为了方便内网其他小白用户快速修改host, 我就搞了个bat文件给他们, 执行后就追加一条来修改host, 参考批处理文件中ECHO命令显示换行(因为我装了adblocker访问的时候页面展示正常, 后来朋友说看不到, 故划掉).

echo. >> %WINDIR%\system32\drivers\etc\hosts & echo 192.168.1.63 bs.ybj.com >> %WINDIR%\system32\drivers\etc\hosts

当然这样以后如果再换IP, 就要手动就改一下host文件了~ 如果偷懒改这个bat文件, 有追加一条新的同域名指向不同IP, 可能不会出问题, 也可能会导致每次访问页面卡20s左右出来. 当然这里我们不考虑文件修改权限的系统相关的问题~

其他思考一: ShadowRoot探索

关于修改本地历史记录的想法诞生后, 我顺便在历史记录chrome://history/中搜索了一下192.168.1.51, 发现有两百多条, 我打算将他们导出成文本替换(其实没什么意义), 然而我发现, 在Console面板里, 这个历史记录居然无法通过普通的JS方法将所有的地址遍历输出, 通过观察Elements面板的DOM结构, 发现原因在于这个#shadow-root (open)这个节点内的DOM元素不能被直接获取到. 从来没有研究过ShadowRoot的我懵逼了, MDN上查到, 它与主DOM树分开渲染, 那么此时我是否有办法获取到DOM子树的根节点内的元素呢. 当然可以, 参考How to access elements under `shadow-root` at 'chrome://downloads' using jquery and selenium?, 原来有这个神奇的/deep/. 于是试着写了一段:

const HISTORYITEMS = document.querySelectorAll('#history-app /deep/ #content /deep/ #history /deep/ #infinite-list /deep/ history-item /deep/ #title');
for (let i = 0; i < HISTORYITEMS.length; i++) {
let item = HISTORYITEMS[i];
let url = item.getAttribute('href');
let name = item.getAttribute('title');
console.log(`${i}: ${name}'的URL地址是${url}
`);
}

由于默认显示条数不会全部显示出来, 所以可能须要手动滚动至底部加载完成后执行.

其他思考二: 真的可以批量修改Chrome存储的历史记录值

后来, 我还是抱以试试的想法去尝试着修改Chrome历史记录, 没想到居然还是很容易的. 确认及准备好以下工作:

  1. 我的系统Windows 10 64bit
  2. 我的Chrome版本63.0.3239.132(正式版本) (64 位)
  3. 下载HxD编辑工具, 直接下载, 安装并打开软件
  4. 关闭Chrome浏览器, 并打开用户个人配置相关文件的目录, (请修改对应的用户名whidy部分替换)

    C:\Documents and Settings\whidy\Local Settings\Application Data\Google\Chrome\User Data\Default

    备份好History, History-journal, History Provider Cache三个文件(防止误操作造成的Chrome破坏造成的损失)

然后直接用HxD依次打开这三个文件, 使用编辑器的替换功能, 将192.168.1.51全部替换为192.168.1.63, 保存.

完成后, 再次启动Chrome, 如果没有发生什么异常, 我想这个奇葩想法的功能就实现了. 我成功的替换了280多条历史记录~

最新文章

  1. 初次接触json...
  2. JAVAFX纯手写布局
  3. tar.xz文件如何解压 (已验证)
  4. [目录]Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案
  5. ffmpeg+ffserver搭建流媒体服务器
  6. nodejs的mysql模块学习(五)数据库连接配置之SSL
  7. WordPress BulletProof Security插件多个HTML注入漏洞
  8. JSP两个动作(include,forward)
  9. Linux安装gitbook
  10. Gulp介绍与入门实践
  11. js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码
  12. robotframework RF使用中需要安装的工具和库
  13. mstOne
  14. 深入springboot原理——一步步分析springboot启动机制(starter机制)
  15. 分布式事务之TCC服务设计和实现注意事项
  16. sonarqube中new issue的标准
  17. canvas获取摄像头的图像
  18. 前端通过js-xlsx获取Excel完整数据
  19. #ifdef、#ifndef、#else、#endif执行条件编译
  20. Daily Scrum9 11.13

热门文章

  1. whistle学习(二)之启动、停止、重启、更新whistle等命令
  2. python 的面试题总汇
  3. VUE神速搭建项目
  4. MySQL的左连接查询,只取出最大的一条数据
  5. svn+jenkins自动部署
  6. tp5将查询数据返回为对象转为数组
  7. Web的了解和servlet的初次见面
  8. 异步IO框架:asyncio 中篇
  9. Internet层协议下IP协议
  10. java8新特性学习:stream与lambda