autoxjs 安卓爬虫自动化

2024-01-10 12:12

本文主要是介绍autoxjs 安卓爬虫自动化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

autoxjs 安卓爬虫自动化

我这里只是测试请勿用于违法的
我这里是小红书


文章目录

  • autoxjs 安卓爬虫自动化
  • 前言
  • 一、自动刷直播间并且抓取商品已经粉丝数量等?
  • 总结


前言

欢迎来到AutoXJS的世界,这是一个充满创新、挑战和技术探索的领域。在这个引领未来的时刻,我们怀揣着对技术的热情,探索着自动化领域的无尽可能性。

AutoXJS旨在推动JavaScript自动化的前沿,探索先进的工具、框架和最佳实践,使开发者能够更高效、更智能地构建出色的应用程序。这不仅仅是一个技术社区,更是一个激发创意、分享知识的聚集地。

我们致力于连接那些对JavaScript和自动化充满热情的人,无论是初学者还是经验丰富的开发者。在AutoXJS,你将发现深入的技术讨论、实用的开发指南以及引领未来的前瞻性思考。


提示:以下是本篇文章正文内容,下面案例可供参考

一、自动刷直播间并且抓取商品已经粉丝数量等?

在这里插入图片描述
抓到的数据
下面是执行的视频的效果:
视频链接
代码:

var xiaohong_backpack_name = "com.xingin.xhs";
app.launch(xiaohong_backpack_name);
sleep(100)
clickByUiSelector('text', "首页");
var width = device.width; // 获取设备的宽度
var height = device.height; // 获取设备的高度
var duration = 500; // 滑动动作持续的时间
// 从屏幕的1/4高度位置滑动到3/4高度位置,模拟下拉动作
swipe(width / 2, height / 4, width / 2, height * 3 / 4, duration);
sleep(2000)
clickByUiSelector('desc', "直播");
sleep(200)
clickNearElement('desc', "直播", -100, 100);
sleep(1000)var resultArray = []; // 存储最终结果
var usernameSet = new Set(); // 存储用户名,用于去重
var currentDownSwipeCount = 0; // 当前下滑次数
function scrollAndFetch() {// 循环7次下滑for (var down = 0; down < 7; down++) {if (currentPackage() !== xiaohong_backpack_name) {console.log("已离开小红书应用,暂停滑动操作。");return; // 退出函数}currentDownSwipeCount = down; var titleElements = id("com.xingin.xhs:id/dl6").find();var viewerElements = id("com.xingin.xhs:id/dho").find();var usernameElements = id("com.xingin.xhs:id/djk").find();var clickAttempts = {};for (var i = 0; i < titleElements.length; i++) {var viewerCount = parseViewerCount(viewerElements[i].text());var titleText = titleElements[i].text();if (viewerCount > 2000 && !usernameSet.has(usernameElements[i].text())) {// 观看人数大于4000且用户名未存储过 clickAttempts[titleText] = (clickAttempts[titleText] || 0) + 1; // 增加点击次数    console.log("大于2000");           if (clickAttempts[titleText] <= 3) { // 限制最多点击3次sleep(1000)clickNearElement('text', titleText, 0,-480);sleep(1000)if (checkIfLivePage()) {live_streaming_entry(usernameElements[i].text(),titleElements[i].text(),viewerElements[i].text(),usernameElements[i].text())usernameSet.add(usernameElements[i].text());}else {return;}}else {console.log("点击尝试超过3次,跳过标题:" + titleText);continue;}}}if (currentDownSwipeCount === down && currentPackage() === xiaohong_backpack_name && !id("com.xingin.xhs:id/s2").findOne(3000)) {swipe(width / 2, height * 3 / 4, width / 2, height / 4, 500);sleep(1000); // 等待内容加载}}// 循环7次上滑回到顶部for (var up = 0; up < 7; up++) {if (currentPackage() !== xiaohong_backpack_name && id("com.xingin.xhs:id/s2").findOne(5000)) {console.log("已离开小红书应用,暂停滑动操作。");return; // 退出函数}swipe(width / 2, height / 4, width / 2, height * 3 / 4, 500);sleep(2000); // 等待页面滑动和加载}// 模拟下拉刷新if (currentPackage() === xiaohong_backpack_name && !id("com.xingin.xhs:id/s2").findOne(2000)) {swipe(width / 2, height / 4, width / 2, height * 3 / 4, 500);sleep(1000);} else {console.log("已离开小红书应用,未执行刷新操作。");}
}function saveDataToJsonFile(data) {// 设置文件路径和名字var path = "/storage/emulated/0/脚本/get_danmu/test/data.json"; // 将对象转换为字符串var dataString = JSON.stringify(data, null, 4);// 写入文件files.write(path, dataString);console.log("数据已保存到文件: " + path);
}while (true) { // 持续循环执行if (currentPackage() === xiaohong_backpack_name) {console.log("当前包名称",currentPackage())scrollAndFetch(); // 调用滑动和数据捕获函数saveDataToJsonFile(resultArray); // 保存数据到文件console.log(JSON.stringify(resultArray, null, 4)); // 打印当前结果currentDownSwipeCount = 0; } else {console.log("不在小红书应用内,脚本暂停运行。");for (let i = 0; i < 30; i++) { // 等待总时长为5分钟(每次暂停10秒,检查30次)sleep(10000); // 暂停10秒if (currentPackage() === xiaohong_backpack_name) {console.log("重新进入小红书应用,继续执行脚本。");break; // 如果重新进入小红书应用,则跳出等待循环}}}
}function parseViewerCount(viewerString) {if (viewerString.includes('W') || viewerString.includes('w')) {// 去除'W',转换为数值后乘以10000return parseFloat(viewerString.replace(/W|w/g, '')) * 10000;} else {// 直接转换为数值return parseInt(viewerString.replace(/\D/g, ''));}
}// 点击直播进入
function live_streaming_entry(usernameElements,title, viewers, username){var _l = id("com.xingin.xhs:id/s2").findOne();_l && _l.click() || console.log("没有找到指定ID的元素");sleep(1000)clickByUiSelector('text', usernameElements,2000);sleep(1000)if (checkTextExists("举报", 3000)) {  // 假设点击成功后会出现"举报"文本console.log("未成功点击,重试...");var _ll = id("com.xingin.xhs:id/esk").findOne(2000);_ll && _ll.click() || console.log("没有找到指定ID的元素");sleep(1000);}clickByUiSelector('text', "取消");sleep(1000)var fansElement = id("com.xingin.xhs:id/bkb").findOne(3000);var likesElement = id("com.xingin.xhs:id/dfp").findOne(3000);var fans = fansElement ? fansElement.text() : "没有抓到";var likes = likesElement ? likesElement.text() : "没有抓到";sleep(800)if(fans != "没有抓到" || likes != "没有抓到") {// 计算起始点和结束点的坐标var startX = width * 3 / 4;  // 从屏幕宽度的3/4处开始滑动var endX = width / 10;       // 到屏幕宽度的1/4处结束滑动// var y = height * 2 / 3;var y = height * 3 / 4; // 执行滑动动作swipe(startX, y, endX, y, duration);sleep(800)clickByUiSelector('text', "销量");sleep(1000)var productNameElement = id("com.xingin.xhs:id/gh5").findOne(2000)var priceElement  = id("com.xingin.xhs:id/hp1").findOne(2000)var salesVolumeElement = id("com.xingin.xhs:id/a1j").findOne(2000)var productName = productNameElement ? productNameElement.text() : "没有抓到";var price = priceElement ? priceElement.text() : "没有抓到";var salesVolume = salesVolumeElement ? salesVolumeElement.text() : "没有抓到";resultArray.push({标题: title,观看人数: viewers,用户名: username,粉丝: fans,收藏: likes,商品名称: productName,价格: price,销量: salesVolume});console.log("标题", title);console.log("观看人数", viewers);console.log("用户名", username);console.log("商品名称", productName);console.log("价格", price);console.log("销量", salesVolume);console.log("粉丝", fans);console.log("收藏", likes);}back();sleep(1000);back();sleep(1000);}function checkTextExists(textToCheck, timeout) {return text(textToCheck).findOne(timeout) != null;
}function clickByUiSelector(selectorType, valueToClick, timeout){// 设置默认超时时间为1000毫秒timeout = timeout || 1000; var uiObject;// 根据selectorType选择查找方式if(selectorType === 'text'){console.log("点击文本:" + valueToClick);uiObject = text(valueToClick).findOne(timeout);} else if(selectorType === 'desc'){uiObject = desc(valueToClick).findOne(timeout);} else {console.log("未知的选择器类型:" + selectorType);return false;}// 进行点击操作if(uiObject != null){uiObject.click();return true; // 点击成功} else {console.log("没有找到:" + valueToClick);return false; // 没有点击,因为没有找到对象}
}function checkIfLivePage() {// 根据页面特定元素来判断是否为直播页面var livePageIndicator = id("com.xingin.xhs:id/s2").findOne(2000);return livePageIndicator !== null;
}function clickNearElement(selectorType, valueToFind, offsetX, offsetY){var uiObject;// 根据selectorType选择查找方式if(selectorType === 'text'){uiObject = text(valueToFind).findOne();} else if(selectorType === 'desc'){uiObject = desc(valueToFind).findOne();} else {console.log("未知的选择器类型:" + selectorType);return false;}// 检查是否找到UI对象if (uiObject != null) {// 计算新的点击位置var x = uiObject.bounds().centerX() + offsetX;var y = uiObject.bounds().centerY() + offsetY;// 执行点击操作click(x, y);return true;} else {console.log("没有找到指定的文本或描述:" + valueToFind);return false;}
}

总结

我这里写了一个测试,更多业务请自行

这篇关于autoxjs 安卓爬虫自动化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590773

相关文章

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.