kfab 发表于 2023-8-29 09:40:11

求助在控制台向目标文本框输入内容正常,但是放在脚本里没反应

本帖最后由 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-item__content > .el-input > .el-input__inner

之后,在控制台测试在该文本框输出内容是没问题的,如下图
!(data/attachment/forum/202308/29/093033crykrwymkgon5rik.jpg)


但是放到脚本里

document.querySelector("div.el-form-item:nth-of-type(1) > .el-form-item__content > .el-input > .el-input__inner").value = "测试";

执行后,发现该界面的第一个文本框里仍然显示默认的“文本替换”,而不显示输入的“测试”,如下图

!(data/attachment/forum/202308/29/093331zly1wtveyqetbr8f.jpg)


后来测试发现,第一次执行脚本不输入,但是关闭该界面后,执行第二次脚本就又显示了,如图
!(data/attachment/forum/202308/29/093525a0wa00ewj9i5wc12.jpg)

这个好奇怪啊,请哥哥们帮忙看看是怎么回事。



后来我添加了另一个功能,ALT+F,进入搜索界面,这时脚本却可以正常向该界面的文本框输入文本,但是前面的ALT+R进入规则替换(二级)界面却需要按ALT+R两次,执行两次才可以输入文本。问题在哪?


另: 怎么使用document.execCommand('paste');   或者其他方法,在文本框输入已经复制好的内容?


修改后的脚本

```
// ==UserScript==
// @name         reader
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptionreader页面alt+r 把选中的文本添加进【新增替换规则】界面
// @descriptionreader页面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调用

```

李恒道 发表于 2023-8-29 09:40:12

没测试网站不好排查问题

但是根据你的描述来看很可能是弹窗还没渲染直接开始搜寻了

控制台没有报错吗

加个settimeout加大延迟试试

kfab 发表于 2023-8-29 12:41:22

李恒道 发表于 2023-8-29 09:40
没测试网站不好排查问题

但是根据你的描述来看很可能是弹窗还没渲染直接开始搜寻了


试了,直接不弹出界面了,应该是我settimeout写的不对。
按两次ATL+R也可以接受,我已经放弃治疗了{:4_108:}

哥哥能说下怎么在文本框输出复制好的内容吗

李恒道 发表于 2023-8-29 18:45:59

kfab 发表于 2023-8-29 12:41
试了,直接不弹出界面了,应该是我settimeout写的不对。
按两次ATL+R也可以接受,我已经放弃治疗了


click之后再settimeout试试

提取clip目前好像没什么特别好的办法....

@王一之 不知道知不知道

Su. 发表于 2023-8-29 19:15:48

kfab 发表于 2023-8-29 12:41
试了,直接不弹出界面了,应该是我settimeout写的不对。
按两次ATL+R也可以接受,我已经放弃治疗了



https://blog.csdn.net/qq_36658051/article/details/107908422
看看这个
页: [1]
查看完整版本: 求助在控制台向目标文本框输入内容正常,但是放在脚本里没反应