1433858005 发表于 2021-11-29 21:37:56

写入文本失败但控制台输入没问题有时间限制

写入文本失败但控制台输入没问题,有时间限制就是运行到最后几步gg了{:4_88:},搞了半天不行,新手学习
网址 https://qpanpan.com/账号123456
密码+Jp123456

// ==UserScript==
// @name         冰火信息编辑
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://qpanpan.com/*
// @icon         https://www.google.com/s2/favicons?domain=mozilla.org
// @grant      none
// ==/UserScript==

(function() {
    'use strict';
   setTimeout(() => {
      //1.商品名称
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evt = new Event('input');
            aq.value = "商品名称";
            aq.dispatchEvent(evt);
      }, 200)

      //2.商品分类
      setTimeout(() => {
            const select1 = document.querySelector(
                '#basicGoods .el-form-item:nth-child(3) .el-col:nth-child(1) .el-select-dropdown'
            ); //一级分类
            const select2 = document.querySelector(
                '#basicGoods .el-form-item:nth-child(3) .el-col:nth-child(2) .el-select-dropdown'
            ); //二级分类
            select1.querySelector('.el-select-dropdown__item:nth-child(5)').click();
            //这里要加一个延时,因为点击“卫衣”后才会出现“李宁卫衣”的选项
            setTimeout(() => {
                select2.querySelector('.el-select-dropdown__item').click();
            }, 200);
      }, 400)
      //3.商品单位
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evt = new Event('input');
            aq.value = "商品单位";
            aq.dispatchEvent(evt);
      }, 800)

      //4.第三方销量
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evt = new Event('input');
            aq.value = "100"; //第三方销量
            aq.dispatchEvent(evt);
      }, 1000)

      //5.库存
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evt = new Event('input');
            aq.value = "100"; //库存
            aq.dispatchEvent(evt);
      }, 1200)

      setTimeout(() => {

            //商品规格页面跳转********************************************************************************************************
            var qq1 = document.querySelectorAll("div");
            qq1.click();
      }, 2000)
      setTimeout(() => {
            //整理商品规格页面运行
            //1.开启商品规格
            var aq = document.querySelectorAll(".el-input__inner");
            var qq1 = document.querySelector(".option-box input");
            qq1.click();
      }, 2200)

      //2.添加规格项
      setTimeout(() => {
            var qq2 = document.querySelector(
                ".goods-spec_info_form-item .el-popover__reference");
            qq2.click();
      }, 2400);

      //3.输入规格项名
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            for (let i = 0; i < aq.length; i++) {
                if (i == 52) {
                  const evt = new Event('input');
                  aq.value = "颜色"; //商品规格
                  aq.dispatchEvent(evt);
                }
            }
      }, 2600);

      //4.输入规格项名确定按钮
      setTimeout(() => {
            var qq = document.querySelectorAll("button");
            qq.click();
      }, 2800);

      //5.填写第一个规格值
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evtt = new Event('input');
            aq.value = "黑色"; //第一个规格值
            aq.dispatchEvent(evtt);
      }, 3000);

      //6.添加规格值按钮·来添加第二个规格
      setTimeout(() => {
            var qq3 = document.querySelector(
                ".goods-spec_info_form-content button");
            qq3.click();
      }, 3200);

      //7.输入第二个值

      setTimeout(() => {
            //var aq = document.querySelectorAll(".el-input__inner");
            var aq = document.querySelectorAll(".el-input__inner");
            const evtt = new Event('input');
            aq.value = "白色"; //第二个规格值
            aq.dispatchEvent(evtt);
      }, 3400);

      //8.添加第二个规格项
      setTimeout(() => {
            var qq4 = document.querySelector(
                ".goods-spec_info_form-item .el-popover__reference");
            qq4.click();
      }, 3600);

      //9.输入规格项名*****

      setTimeout(() => {

            var aqq = document.querySelectorAll(".el-input__inner");
            const evtt = new Event('input');
            aqq.value = "尺寸"; //第二个规格值
            aqq.dispatchEvent(evtt);
      }, 5800);

      //10.输入规格项名确定按钮
      setTimeout(() => {
            var qq5 = document.querySelectorAll("button");
            qq5.click();
      }, 7000);

      //11.填写第二个规格项的第一个规格值
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evtt = new Event('input');
            aq.value = "M"; //因为第二个规格项占了一个19值,所以+1成了20
            aq.dispatchEvent(evtt);
      }, 7200);

      //12.添加规格值按钮
      setTimeout(() => {
            var qq6 = document.querySelectorAll(
                ".goods-spec_info_form-content button");
            qq6.click();
      }, 7400);

      //13输入第二个规格值
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evtt = new Event('input');
            aq.value = "L"; //第二个规格值
            aq.dispatchEvent(evtt);
      }, 7600);

      //12.添加规格值按钮
      setTimeout(() => {
            var qq7 = document.querySelectorAll(
                ".goods-spec_info_form-content button");
            qq7.click();
      }, 7800);

      //13输入第二个规格值
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evtt = new Event('input');
            aq.value = "XL"; //第二个规格值
            aq.dispatchEvent(evtt);

      }, 8000);
         //设置库存
      setTimeout(() => {

            var qq1 = document.querySelectorAll(".el-popover__reference");
            qq1.click(); //1是分组 3是市场价格4是现价
      }, 8200)

      //库存值 113
      setTimeout(() => {
            var aq = document.querySelectorAll(".el-input__inner");
            const evt = new Event('input');
            aq.value = "100";
            aq.dispatchEvent(evt);
            //**************************************
      }, 10400);

      setTimeout(() => {
            //确定库存按钮
            var qq1 = document.querySelectorAll(".el-button--primary");
            //alert(qq1.length);    3上传图片 5设置市场价格6设置现价8商品编码9商品条码 10重量11体积12清空所有14保存?   16库存
            qq1.click();
      },14600);


      setTimeout(() => {
            //设置现价
            var qq1 = document.querySelectorAll(".el-popover__reference");
            qq1.click();
      },14800);


      setTimeout(() => {
            //现价值
            var aq = document.querySelectorAll(".el-input__inner");
            const evt = new Event('input');
            aq.value = "100";
            aq.dispatchEvent(evt);
      }, 16000);


      setTimeout(() => {
            //确定现价按钮
            var qq1 = document.querySelectorAll(".el-button--primary");
            qq1.click();
      }, 16200);
    }, 5000);
    // Your code here...
})();





1433858005 发表于 2021-11-29 21:38:47

      //库存值 113这里开始

cxxjackie 发表于 2021-11-29 23:55:09

这个代码看的我头疼,不用写这么多setTimeout的,代码本来就会自上而下地运行,不需要你用setTimeout来规定执行顺序,只有在点击某些选项后元素发生改变时才需要加延迟,而且setTimeout也应该嵌套使用,而不是多个setTimeout并列然后2秒、3秒这样的。然后你这里出现问题主要还是querySelectorAll然后取下标这种写法,我个人非常不推荐,要知道页面结构不是一成不变的,你在测试时点击某些选项可能会发生节点插入、删除、移动位置等等,然后控制台里看到的下标,可能跟脚本运行时并不一致,还有如果你把脚本给别人用,他装个划词翻译的插件往页面里添加了几个元素,再装个广告屏蔽删掉几个元素,你的下标就可能出大问题。建议还是老老实实querySelector找,不要偷懒,实在不会找的话可以审查元素右键-Copy-Copy selector(chrome浏览器),自动生成选择器,一般会很长而且不一定准确,最好自己再调整下。

李恒道 发表于 2021-11-30 09:16:29

cxxjackie 发表于 2021-11-29 23:55
这个代码看的我头疼,不用写这么多setTimeout的,代码本来就会自上而下地运行,不需要你用setTimeout来规定 ...

悟了
我之前看到还思考了半天可能什么问题...

1433858005 发表于 2021-11-30 10:30:19

cxxjackie 发表于 2021-11-29 23:55
这个代码看的我头疼,不用写这么多setTimeout的,代码本来就会自上而下地运行,不需要你用setTimeout来规定 ...

好的·找了一个元素定位插件目测挺好用的{:4_95:}

1433858005 发表于 2021-11-30 10:34:36

解压后打开网址edge://extensions/拖到里面就好了
https://www.cnblogs.com/haifeima/p/12907023.html

执念e1 发表于 2021-11-30 23:27:38

cxxjackie 发表于 2021-11-29 23:55
这个代码看的我头疼,不用写这么多setTimeout的,代码本来就会自上而下地运行,不需要你用setTimeout来规定 ...

gg牛啊我悟了

gwinkle 发表于 2021-12-2 14:02:50

我也是有一个油猴脚本,之前一直用着都可以写文本框的,今天突然就写不进去了。控制台就可以写进去,奇怪。
页: [1]
查看完整版本: 写入文本失败但控制台输入没问题有时间限制