本帖最后由 kfab 于 2023-8-29 11:09 编辑
本帖最后由 kfab 于 2023-8-29 09:54 编辑
https://github.com/hectorqin/reader
上有个类似手机阅读3.0的项目,布置服务器,网页访问服务器阅读抓取小说。
在阅读页面点击文本会弹出对话框是否添加入过滤规则,但是由于常常不想替换时点击了页面,就会弹出对话框。
好在可以在设置里设置不弹出,但是这样的话在需要替换的时候,就要进入设置页面,滑动到最底端才可以点击过滤,然后再在弹出的界面里再点击下新增,才可以看到需要的添加过滤的界面。
这样就太繁琐了,于是就想通过脚本直接调出这个添加过滤的界面,通过一些努力成功调出了该界面,接下来需要的操作是:
1.在该页面的第一个文框输出选中时自动复制的文本内容
2.在该页面的第二个文本框输出选中时自动复制的文本内容
3.激活该页面的第三个文本框
4.鼠标移动到确定按钮上,但不点击
结果第一步就遇到了问题,顺利找到第一个文本框
div.el-form-item:nth-of-type(1) > .el-form-itemcontent > .el-input > .el-inputinner
之后,在控制台测试在该文本框输出内容是没问题的,如下图
但是放到脚本里
document.querySelector("div.el-form-item:nth-of-type(1) > .el-form-itemcontent > .el-input > .el-inputinner").value = "测试";
执行后,发现该界面的第一个文本框里仍然显示默认的“文本替换”,而不显示输入的“测试”,如下图
后来测试发现,第一次执行脚本不输入,但是关闭该界面后,执行第二次脚本就又显示了,如图
这个好奇怪啊,请哥哥们帮忙看看是怎么回事。
后来我添加了另一个功能,ALT+F,进入搜索界面,这时脚本却可以正常向该界面的文本框输入文本,但是前面的ALT+R进入规则替换(二级)界面却需要按ALT+R两次,执行两次才可以输入文本。问题在哪?
另: 怎么使用document.execCommand('paste'); 或者其他方法,在文本框输入已经复制好的内容?
修改后的脚本
// ==UserScript==
// @name reader
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @description reader页面alt+r 把选中的文本添加进【新增替换规则】界面
// @description reader页面alt+f 把选中的文本添加进【搜索】界面
// @author 五味子
// @include http://192.168.1.2:8080/#/reader
// ==/UserScript==
function replace() {
'use strict';
var r = window.event.keyCode
var f = window.event.keyCode
if (r == 82 && event.altKey) //按下 r键+alt键
{
//复制选中内容
document.execCommand('Copy');
//点击【新增规则】
document.querySelector("div.el-dialog__wrapper:nth-of-type(5) > .el-dialog > .el-dialog__footer > .dialog-footer > div > button.el-button--medium.el-button--primary.float-left.el-button:nth-of-type(3) > span").click()
//在【名称】文本框输入
document.querySelector("div.el-form-item:nth-of-type(1) > .el-form-item__content > .el-input > .el-input__inner").value = "测试";
}
if (f == 70 && event.altKey) //按下 f键+alt键
{
//复制选中内容
document.execCommand('Copy');
//点击【搜索】
document.querySelector("div.float-btn:nth-of-type(2) > .el-icon-search").click()
//在【名称】文本框输入
document.querySelector(".el-input--prefix.el-input--mini.el-input.search-input > .el-input__inner").value = "测试";
}
}
document.onkeydown = replace; //当按下按键时,onkeydown调用
document.onkeydown = search; //当按下按键时,onkeydown调用