使用js 完成chrome web 自动化或者爬虫模版例子

js 复制代码
async function executeSteps() {
//插线
    var notes_list = [];

    var total_height=document.querySelector("#pack_virtual_lists").scrollHeight
    var scroll_height =0
    while (scroll_height<=total_height) {
    document.querySelector("#pack_virtual_lists").scrollTop+=100
    scroll_height+=100
    await delay(1000)
    console.log(document.querySelector("#pack_virtual_lists").scrollTop)



   // 获取节点列表
   var notes = document.querySelector("#pack_virtual_lists").childNodes;
   var div_count = notes[0].childElementCount;

   try{
   for (let i = 0; i < div_count; i++) {
        var current_notes = notes[0].childNodes[i]
       if (notes_list.includes(current_notes))
       {
       continue;
       }
       else
       {
       notes_list.push(current_notes);
       }
      var temp = notes[0].childNodes[i].textContent.indexOf("");
      if (temp>=0) {
         var tmp = notes[0].childNodes[i].childNodes[1].childNodes[0].nodeName;
//         var tmp = notes[0].childNodes[0].childNodes[1].textContent;
         if (tmp == "IMG") {
            // 失效名字
            name = notes[0].childNodes[i].childNodes[1].childNodes[0].getAttribute("src").indexOf("dao");
            console.log("zhe");
            if (name != -1) {
               // 选择该包
               notes[0].childNodes[i].click();
               await delay(300); // 等待1秒

               // 点击插线
               document.querySelector("div.ant-row.ant-row-space-between.ant-row-middle > div.btns_rows > div > div > div > button:nth-child(7)").click();
               await delay(300); // 等待1秒

               // 识别开关属性
               document.querySelector("#crossMotorcade").click();
               await delay(300); // 等待1秒

               var first_flag = document.querySelector("#crossMotorcade").getAttribute("ant-click-animating");
               if (first_flag == "false") {
                  document.querySelector("#crossMotorcade").click();
                  await delay(300); // 等待1秒
               }

               // 确定插线
               document.querySelector("div > div.ant-modal-wrap > div > div.ant-modal-content > div.ant-modal-footer > button.ant-btn.ant-btn-primary").click();
               await delay(1000); // 等待1秒

               // 识别是否有没有符合的线就点击取消
               try {
               document.querySelector("div.ant-modal-wrap > div > div.ant-modal-content > div.ant-modal-footer > button.ant-btn.ant-btn-default").click()

               }

                catch (error) {
                console.error("执行骤出错:", error);
                try{
                var message=document.querySelector(".ant-message>div").childElementCount;
                var total_time=0
                while (message!=0)
                {
                console.log("等待");
                await delay(3000); // 等待1秒
                message=document.querySelector(".ant-message>div").childElementCount;
                total_time+=3;
                if (total_time>30)
                {
                break;
                }
                }

                try
                {
//                document.querySelector("div.ant-drawer-content-wrapper > div > div > div.ant-drawer-header > div > button").click()
                document.querySelector("div.ant-drawer-content-wrapper > div > div > div.ant-drawer-header > div > button ").click()
                console.log("关闭成功结果");
                }
                catch(error)
                {
                console.log("没有成功");
                }



                }
                catch(error)
                {
                console.log("结束");
                }


//                await delay(5000); // 等待1秒
                }
            }
         }
      }
   }
   }
   catch(e)
   {
   console.log("超时失败跳过",e)
   }

   }









 // 开始放弃插线
  document.querySelector("#pack_virtual_lists").scrollTop=0;
  var scroll_height =0
  while (scroll_height<=total_height) {
    document.querySelector("#pack_virtual_lists").scrollTop+=100
    scroll_height+=100
    await delay(1000)
    console.log(document.querySelector("#pack_virtual_lists").scrollTop)
    // 获取节点列表
   var notes = document.querySelector("#pack_virtual_lists").childNodes;
   var div_count = notes[0].childElementCount;

    try
    {
     for (let i = 0; i < div_count; i++) {
			var tmp = notes[0].childNodes[i].textContent.indexOf("失败");
			console.log(tmp,"检测失败");
			if (tmp>=0)
			//如果失败就放弃插线
			{
			    notes[0].childNodes[i].click()
			    await delay(1000)

				document.querySelector(
						"#rc-tabs-0-panel-unused > div > div.ant-col.ant-col-17 > div.module.routeslists > div > div > div.ant-alert.ant-alert-error.ant-alert-banner.routesLists_alert > div > div > button:nth-child(3)"
					)
					.click();
				document.querySelector(
						"div > div.ant-popover-inner > div > div.ant-popover-buttons > button.ant-btn.ant-btn-primary.ant-btn-sm"
					)
					.click();

			}
		}
    }
    catch(e)
    {
    console.log("超时失败跳过",e)
    }


    }

}

function delay(ms) {
   return new Promise(resolve => setTimeout(resolve, ms));
}

executeSteps();

这是用JavaScript编写的异步函数,主要用来操作页面元素。

函数executeSteps()首先设置一个空的notes_list数组和总高度total_height,通过查询选择器获取页面元素的滚动高度。

然后,通过while循环,实现向下滚动,每次滚动100的高度,并适当延迟。

接着,通过选择器获取节点列表,并获取其中的元素数量。遍历这些元素,如果它们不在notes_list中,就将它们添加到notes_list。检查元素的文本内容,如果含有"拆包选包",并且其中的IMG元素含有"dixiao",则会触发以下操作:点击元素,点击插线按钮,修改开关属性,点击确定插线按钮,尝试点击取消按钮。

如果出错,打印错误信息,并点击关闭按钮。并将"ant-message>div"元素中的子节点数量作为判断依据,如果不为0,就延迟等待。

除此之外,函数executeSteps()还设置了对插线失败的处理,循环中判断如果元素的文本内容包含"插线失败",就触发放弃插线的操作。如果再次失败,也会打印失败信息。

函数delay()是对JavaScript定时函数setTimeout的封装,用于实现异步延迟。最后执行executeSteps()函数。

总的来说,这段代码主要为了在页面上自动执行一系列的操作,包括滚动页面、查找特定元素、点击按钮、修改属性等,并对可能出错的情况进行处理。
JavaScript作为一种脚本语言,有以下优点用于编写爬虫:

  1. 跨平台:JavaScript能运行在多种平台上,包括浏览器、Node.js和其他JavaScript解释器,可跨平台开发爬虫。

  2. 强大的库:JavaScript拥有强大的库,如cheerio、puppeteer、request和axios等。这些库提供了许多有用的功能,比如解析HTML、模拟浏览器行为、发起网络请求等。

  3. 易于学习和使用:JavaScript语法简单,易于学习和使用。开发者可以用JavaScript快速地编写简单的爬虫,也可以利用库来编写复杂的爬虫。

  4. 可扩展性:JavaScript拥有良好的可扩展性,可以轻松地构建模块化的爬虫。开发者可以利用npm(Node.js的包管理器)来安装和维护依赖项。

总之,JavaScript语言和丰富的库提供了许多优势,这使得JavaScript成为一种流行的语言,用于编写爬虫。

相关推荐
清灵xmf9 分钟前
TypeScript 类型进阶指南
javascript·typescript·泛型·t·infer
小白学大数据15 分钟前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
qq_3901617724 分钟前
防抖函数--应用场景及示例
前端·javascript
334554321 小时前
element动态表头合并表格
开发语言·javascript·ecmascript
John.liu_Test1 小时前
js下载excel示例demo
前端·javascript·excel
Yaml41 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事1 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶1 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo1 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v1 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript