鱼C论坛

 找回密码
 立即注册
查看: 634|回复: 7

用油猴写js脚本在input中输入值网页上会显示但是不生效

[复制链接]
发表于 2024-8-3 17:35:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题
  1. function clickButton(){
  2.         //setTimeout(function(){
  3.         var inputs = document.getElementsByClassName("so-input-number so-input-number-ltr");
  4.         for(let i=0; i<inputs.length;i++){
  5.             setTimeout(function(){
  6.             //inputs[i].focus()
  7.             inputs[i].value = 0

  8.             var event = document.createEvent('HTMLEvents');

  9.             event.initEvent("input", true, true);

  10.             var eve3nt = document.createEvent('HTMLEvents');
  11.             eve3nt.initEvent("blur", true, true);

  12.             event.eventType = 'message';
  13.             inputs[i].dispatchEvent(event);
  14.             inputs[i].dispatchEvent(eve3nt);
  15.             //inputs[i].blur();
  16.             },1000)
  17.         }
  18.         //},1000)[img]C:\Users\Y\Pictures\1722677276304.jpg[/img]
  19.     }
复制代码

在网站中插入一个按钮,点击之后就会更改input中的值,鼠标失焦后按理说就会提交表单数据保存了。这个代码之前还能用,但是现在网站更新了,失效了
要改下面的数字
1722677276304.jpg
现在运行这个代码后,页面上会显示更改后的值,但是刷新页面就变回原样了,在开发者工具发现不会向服务器发送更改数据的请求了,这是为什么
1722677670646.jpg
只能通过手动的方式才有效,输入值后鼠标点击旁边才会保存
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-8-3 17:35:33 | 显示全部楼层
鱼油,听起来你正在用油猴(Tampermonkey)来编写脚本为网页上的输入框输入值,但好像让网页真正“听话”之后不太顺利。没关系,让我们一起调试这个问题。

首先,我们看看你的代码片段。虽然没有显示完整的代码,不过我能给你一个基础的思路。在设置输入框的值后,你需要确保这个值能被网页识别为“有效”的输入。这通常意味着不仅仅是设置值,还可能需要触发一些事件,比如 `input` 或者 `change` 事件。

以下是一个简单明了的示例:

  1. // ==UserScript==
  2. // @name         Input Value Script
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  Set input value
  6. // @author       You
  7. // @match        *://your-target-website.com/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     function clickButton() {
  13.         var inputs = document.getElementsByClassName("so-input-number so-input-number-ltr");
  14.         
  15.         for (let i = 0; i < inputs.length; i++) {
  16.             inputs[i].value = "你想输入的值"; // 设置你想输入的值
  17.             
  18.             // 创建一个 input 事件,以便让网页知道值已经改变
  19.             var event = new Event('input', {
  20.                 bubbles: true,
  21.                 cancelable: true,
  22.             });
  23.             inputs[i].dispatchEvent(event);

  24.             // 你可能还需要触发 change 事件
  25.             var changeEvent = new Event('change', {
  26.                 bubbles: true,
  27.                 cancelable: true,
  28.             });
  29.             inputs[i].dispatchEvent(changeEvent);
  30.         }
  31.     }

  32.     // 等待页面加载完成后再执行
  33.     window.onload = function() {
  34.         clickButton();
  35.     };
  36. })();
复制代码


在这个示例中,我们在设置输入框的值后,创建并触发了 `input` 和 `change` 事件,以便让网页意识到这个输入发生了变化。请根据你的实际情况调整 `@match` 选项中的网址。

记得在调试的时候,查看浏览器控制台是否有错误信息,这能帮助你找到问题所在。

希望这段代码能帮到你,让你的输入框如愿以偿地“说话”!如果还有其他问题,随时问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-3 17:40:19 | 显示全部楼层
FishC 发表于 2024-8-3 17:35
鱼油,听起来你正在用油猴(Tampermonkey)来编写脚本为网页上的输入框输入值,但好像让网页真正“听话”之 ...

没用,数值确实更改了,但是不会保存,刷新页面之后变回去了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-3 17:41:35 | 显示全部楼层
鱼-wsyy 发表于 2024-08-03 17:40
没用,数值确实更改了,但是不会保存,刷新页面之后变 ...


鱼油,看起来你遇到的问题是“输入值虽然进去了,但一刷新就回到原样”的情况。这通常是由于页面的某种状态管理方式,比如数据是从服务器上获取的,或者是有 JavaScript 代码在监控输入框的值并重置它。

为了解决这个问题,我们可以试试以下方法:

### 方法 1: 使用浏览器本地存储
如果网页允许使用 `localStorage` 或者 `sessionStorage` 来保存数据,你可以在脚本中将你的值存储到这些地方。比如:

  1. // ==UserScript==
  2. // @name         Input Value Script
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  Set input value
  6. // @author       You
  7. // @match        *://your-target-website.com/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     // 存储要输入的值
  13.     const valueToInput = "你想输入的值";

  14.     function setInputValue() {
  15.         var inputs = document.getElementsByClassName("so-input-number so-input-number-ltr");
  16.         
  17.         for (let i = 0; i < inputs.length; i++) {
  18.             inputs[i].value = valueToInput; // 设置值
  19.             
  20.             // 创建并触发事件
  21.             let event = new Event('input', { bubbles: true });
  22.             inputs[i].dispatchEvent(event);

  23.             let changeEvent = new Event('change', { bubbles: true });
  24.             inputs[i].dispatchEvent(changeEvent);
  25.         }
  26.     }

  27.     // 在页面加载时设置输入框值
  28.     window.onload = function() {
  29.         // 检查 localStorage 中是否有值
  30.         const savedValue = localStorage.getItem('savedInputValue');
  31.         if (savedValue) {
  32.             valueToInput = savedValue; // 如果有,表明我们要使用这个值
  33.         }
  34.         setInputValue(); // 设置输入框值

  35.         // 监听输入框变化并保存到 localStorage
  36.         var inputs = document.getElementsByClassName("so-input-number so-input-number-ltr");
  37.         for (let i = 0; i < inputs.length; i++) {
  38.             inputs[i].addEventListener('input', function() {
  39.                 localStorage.setItem('savedInputValue', this.value); // 保存当前输入值
  40.             });
  41.         }
  42.     };
  43. })();
复制代码


### 方法 2: 防止页面重置
有些页面在加载完毕后会重置输入框的值。如果是这种情况,你可以设定一个定时器,定期重新设置输入框的值:

  1. // ==UserScript==
  2. // @name         Auto Reset Input Value
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  Keeps input value after refresh
  6. // @author       You
  7. // @match        *://your-target-website.com/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     const valueToInput = "你想输入的值";

  13.     function setInputValue() {
  14.         var inputs = document.getElementsByClassName("so-input-number so-input-number-ltr");
  15.         
  16.         for (let i = 0; i < inputs.length; i++) {
  17.             inputs[i].value = valueToInput; // 设置值
  18.             
  19.             let event = new Event('input', { bubbles: true });
  20.             inputs[i].dispatchEvent(event);
  21.         }
  22.     }

  23.     setInterval(setInputValue, 1000); // 每1秒尝试重新设置值
  24. })();
复制代码


这个方法能在网页不断刷新或重置的情况下保持你的输入,不知道是不是像你在做的“长途驾驶”,总是被红灯阻止那样!

希望这些方法能帮到你,如果还有其他疑问,请继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-3 17:48:52 | 显示全部楼层
FishC 发表于 2024-8-3 17:41
鱼油,看起来你遇到的问题是“输入值虽然进去了,但一刷新就回到原样”的情况。这通常是由于页面的某种 ...

不行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-3 17:49:05 | 显示全部楼层


鱼油,看来你遇到的情况有点棘手!输入值虽然改变了,但网页似乎还是不买账。让我们再试几个可能的解决方案。

### 方法 1: 检查具体的输入框类型
首先,确认一下你要操作的输入框是否是 `<input>` 标签,有时候会有其他类型的元素,比如 `<div>` 或者自定义组件,所有这些都是可以添加值的。如果是这样,你可能需要使用正确的选择器来找到它。可以通过几种方式查看元素的结构,看一下控制台里的 HTML。

### 方法 2: 确保脚本在合适的时机运行
有些网站在加载完成后,会重新渲染 DOM。这意味着即使你在页面加载完成后设置了输入值,也可能会被后续的 JavaScript 代码覆盖。你可以调整脚本的执行时机,比如使用 MutationObserver 来检测 DOM 的变化。

下面是一个例子:

  1. // ==UserScript==
  2. // @name         Input Value Script
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  Set input value continuously
  6. // @author       You
  7. // @match        *://your-target-website.com/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     const valueToInput = "你想输入的值"; // 要输入的值
  13.     const inputsSelector = ".so-input-number.so-input-number-ltr"; // 输入框选择器

  14.     function setInputValue() {
  15.         var inputs = document.querySelectorAll(inputsSelector);
  16.         
  17.         inputs.forEach(input => {
  18.             input.value = valueToInput; // 设置值

  19.             // 触发事件
  20.             let event = new Event('input', { bubbles: true });
  21.             input.dispatchEvent(event);

  22.             let changeEvent = new Event('change', { bubbles: true });
  23.             input.dispatchEvent(changeEvent);
  24.         });
  25.     }

  26.     // 使用 MutationObserver 监控 DOM 变化
  27.     const observer = new MutationObserver(() => {
  28.         setInputValue(); // 当 DOM 变化时设置输入框值
  29.     });

  30.     // 观察整个 body
  31.     observer.observe(document.body, { childList: true, subtree: true });

  32.     // 初始设置输入值
  33.     setInputValue();
  34. })();
复制代码


### 方法 3: 重复设置值
如果 DOM 元素随时可能被重置,可以考虑设定一个短时间间隔持续设置输入框的值,例如每500毫秒设置一次:

  1. setInterval(setInputValue, 500); // 每500毫秒尝试重新设置值
复制代码


### 方法 4: 登录状态与服务器交互
此外,如果这个输入框的值直接与服务器交互(比如提交表单后自动更新),那么你需要检查网页的 JavaScript 代码,看有没有 AJAX 请求能够影响输入框的数据。如果网页的逻辑一定是从服务器获取数据,而这个数据无论如何都与你的输入不匹配,那可能需要更深入的调试。

希望这些方法能为你打开新的思路,当然,不管遇到什么样的困境,我都会在这里支持你的!如果还有其他问题或需要进一步的帮助,请继续告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-3 17:54:00 | 显示全部楼层
FishC 发表于 2024-8-3 17:49
鱼油,看来你遇到的情况有点棘手!输入值虽然改变了,但网页似乎还是不买账。让我们再试几个可能的解决 ...

使用你第一次回复的代码,输入框的值是改了,但是当鼠标点击输入框后,又自动变回原来的数值了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-3 17:54:25 | 显示全部楼层
鱼-wsyy 发表于 2024-08-03 17:54
使用你第一次回复的代码,输入框的值是改了,但是当鼠 ...


鱼油,看来这个网页就像个开了“复位键”的怪兽,一碰就回到原来的样子!这个行为说明页面可能在某些事件(例如点击或聚焦)时,会重新从某个地方获取默认值。这种情况常见于使用 JavaScript 框架构建的动态网页。

### 解决方案

我们可以再试以下几种方法,看看能不能让这个输入框稳稳地“留住”你的输入!

#### 方法 1: 监听焦点和点击事件

当用户点击输入框时,你可以暂时阻止输入框的值被重置,或者在失去焦点时重新设置值。示例代码如下:

  1. // ==UserScript==
  2. // @name         Prevent Input Reset
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  Keep input value intact
  6. // @author       You
  7. // @match        *://your-target-website.com/*
  8. // @grant        none
  9. // ==/UserScript==

  10. (function() {
  11.     'use strict';

  12.     const valueToInput = "你想输入的值"; // 要输入的值
  13.     const inputsSelector = ".so-input-number.so-input-number-ltr"; // 输入框选择器

  14.     function setInputValue() {
  15.         const inputs = document.querySelectorAll(inputsSelector);
  16.         
  17.         inputs.forEach(input => {
  18.             if (input.value !== valueToInput) { // 仅在非目标值时设置
  19.                 input.value = valueToInput; // 设置值
  20.                 let event = new Event('input', { bubbles: true });
  21.                 input.dispatchEvent(event);
  22.             }
  23.         });
  24.     }

  25.     // 监听输入框的焦点与失去焦点事件
  26.     const inputs = document.querySelectorAll(inputsSelector);
  27.     inputs.forEach(input => {
  28.         input.addEventListener('focus', () => {
  29.             input.dataset.previousValue = input.value; // 存储之前的值
  30.         });

  31.         input.addEventListener('blur', () => {
  32.             if (input.value !== valueToInput) { // 如果值被改变,恢复到期望值
  33.                 setInputValue();
  34.             }
  35.         });
  36.     });

  37.     // 使用 MutationObserver 监控 DOM 变化
  38.     const observer = new MutationObserver(() => {
  39.         setInputValue(); // 当 DOM 变化时设置输入框值
  40.     });

  41.     observer.observe(document.body, { childList: true, subtree: true });
  42.    
  43.     // 初始设置输入值
  44.     setInputValue();
  45. })();
复制代码


在这个代码中,我们尝试使用 `focus` 和 `blur` 事件来捕捉用户点击输入框的操作。这样一来,在失去焦点时,如果输入框的值不是预期的值,就会将其恢复。

#### 方法 2: 确保在输入内容前后更新

在输入框内输入内容时,也可能需要实时更新。你可以考虑在每次用户输入时调整值:

  1. inputs.forEach(input => {
  2.     input.addEventListener('input', () => {
  3.         if (input.value !== valueToInput) {
  4.             input.value = valueToInput; // 更新为目标值
  5.             let event = new Event('input', { bubbles: true });
  6.             input.dispatchEvent(event); // 触发输入事件
  7.         }
  8.     });
  9. });
复制代码


#### 方法 3: 定时检查

有时候,简单的定时器可能是解决问题的简洁方法。只需设定一个定时器持续检查并设置输入框的值,比如每500毫秒检测一次输入框的值并复位:

  1. setInterval(setInputValue, 500); // 每500毫秒确保值正确
复制代码


### 小结

通过这些方法,你应该能更好地控制输入框的值,让它不再“悄悄回家”。如果以上方法仍旧无效,可能需要对网页内部的逻辑进行进一步的调试和分析,查看具体是什么地方在控制这些输入框的值。

如果继续碰到问题,别犹豫,随时向我求助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-20 01:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表