python闲鱼机器人_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~
阅读文本大概需要 10 分钟。
1
目 标 场 景
闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易。
在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成发货,这样显得商品的交易效率很低下。
那能不能做到「自动发货、自动上新」,全程自动化操作发货呢?答案是肯定的。
本篇文章的目的是为闲鱼定制一个「自动发货机器人」,实现商品自动发货的功能。
2
编 写 代 码
已经实现了消息自动回复的功能,本篇文章将继续在这个基础之上去实现自动发货机器人的功能。
首先,我们需要根据聊天界面,对订单的状态进行分类。
闲鱼中一个商品的订单状态包含:交易前、等待买家付款、等待卖家发货、退款等多种状态。
这里,我们只需要把交易前和等待卖家发货两种状态给筛选出来。
/***
* 判断订单的状态
*/
public static int getOrderStatus(AccessibilityNodeInfo node){
List status_nodes = node.findAccessibilityNodeInfosByViewId(Ids.id_order_status);
int status = 0;
if (null == status_nodes || 0 == status_nodes.size())
{
status = -1;
} else
{
AccessibilityNodeInfo first_node = status_nodes.get(0);
String status_content = first_node.getText().toString();
//交易前的普通对话
if (TextUtils.equals("交易前聊一聊", status_content))
{
status = 0;
} else if (TextUtils.equals("等待卖家发货", status_content))
{
status = 1;
} else if (TextUtils.equals("等待买家付款", status_content))
{
status = 2;
} else
{
status = 3;
}
}
return status;
}
然后编写 UI 界面,将发货链接地址输入到输入框内,点击保存,保存到本地内存中。
//输入发货内容,比如网盘地址
String content = delivery_rebot_content_et.getEditableText().toString().trim();
if (TextUtils.isEmpty(content))
{
SnackbarUtils.Short(delivery_rebot_set_content_btn, "请先输入要发货的内容").show();
} else
{
SettingConfig.getInstance().setAutoDeliverContent(content);
delivery_rebot_content_et.getEditableText().clear();
SnackbarUtils.Long(delivery_rebot_set_content_btn, "设置发货成功!!!").show();
}
当判断当前页面是聊天界面,并且订单状态是「等待卖家发货」时,就从内存中读取数据,将网盘链接地址以消息的形式发送给买家。
//卖家已拍下,自动发货
//发货的内容,一般是网盘地址
String content = SettingConfig.getInstance().getAutoDeliverContent();
//回复内容
reply_content(event, content);
发完消息后,接着查找右上角的「去发货」元素,执行点击操作,模拟去发货。
监听到到达「发货界面」的事件之后,查找右上角的「无需寄件」元素,再进行一次点击操作。
//发货界面 Activity
public static String class_name_deliver = "com.taobao.idlefish.webview.WebHybridActivity";
/***
* 判断是否是发货界面
*/
public static boolean judgeIsDeliverPage(AccessibilityNodeInfo node){
boolean result = false;
List center_node = node.findAccessibilityNodeInfosByViewId(Ids.id_center_title);
List right_node = node.findAccessibilityNodeInfosByViewId(Ids.id_right_up);
if (center_node != null && right_node != null && center_node.size() > 0 && right_node.size() > 0 &&
center_node.get(0).getText().equals("我要发货") && right_node.get(0).getText().equals("无需寄件")
)
{
result = true;
}
return result;
}
/***
* 发货界面处理
* @param event
*/
private void handleDeliverMet(AccessibilityEvent event){
AccessibilityNodeInfo rightNode = findViewByIDAndText(Ids.id_right_up, "无需寄件");
performViewClick(rightNode);
}
通过上面的操作,会弹出一个用于确认发货的对话框。
我们接着使用 Android Monitor 查看当前页面的元素信息,发现这个页面除了标题栏,内容区都包含在一个「WebView」里面。
由于元素包含在 WebView 里,如果直接利用上面的方式查找对话框中的「文本内容为继续」的按钮元素是获取不到的。
这里需要对配置文件进行修改,增加一个「flags」的属性,保证能获取到当前页面包含 Web 元素的所有元素内容。
@Override
protected void onServiceConnected(){
super.onServiceConnected();
AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();
serviceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
serviceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
serviceInfo.packageNames = new String[]{"com.taobao.idlefish"};
serviceInfo.notificationTimeout = 100;
//保证能够获取到Web元素
serviceInfo.flags = serviceInfo.flags | AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY;
setServiceInfo(serviceInfo);
}
然后先获取到 WebView 元素,再遍历查找筛选其子元素。
/***
* 查找WebView的控件,如果找到,执行点击操作
* @param content
*/
public void findWebViewByTextAndClick(String content){
AccessibilityNodeInfo rootNode = findViewByID(Ids.id_webview_root);
if (rootNode != null)
{
for (int i = 0; i
{
AccessibilityNodeInfo child = rootNode.getChild(i);
if ("com.uc.webview.export.WebView".contentEquals(child.getClassName()))
{
findEveryViewNode(child, content);
break;
}
}
} else
{
Log.e("xag", "webview rootview is null");
}
}
当查找到一个元素文本内容为确定,并且元素「可点击」,就执行点击操作,即完成了当前商品发货的操作。
private void findEveryViewNode(AccessibilityNodeInfo node, String content){
if (null != node && node.getChildCount() > 0)
{
for (int i = 0; i
{
AccessibilityNodeInfo child = node.getChild(i);
// 有时 child 为空
if (child == null)
{
continue;
}
String className = child.getClassName().toString();
CharSequence text_raw = child.getText();
if ("android.view.View".equals(className) && !TextUtils.isEmpty(text_raw))
{
boolean isClickable = child.isClickable();
Log.e("xxx", "内容是:" + text_raw.toString());
//isClickable:可点击的按钮,按钮内容是继续
if (isClickable && TextUtils.equals(content, text_raw.toString()))
{
child.performAction(AccessibilityNodeInfo.ACTION_CLICK);
break;
}
}
// 递归调用
findEveryViewNode(child, content);
}
}
}
3
结 果 结 论
完成发货之后,执行全局返回的操作,直到页面重新回到闲鱼主界面为止。
当然,也可以在发货完成之后,点击这个商品的重新编辑按钮,修改后再次发布商品,这样就可以实现一件商品「自动发货、自动上新」的循环操作。
我已经将全部源码上传到后台上,关注公众号后回复「发货机器人」即可获得下载链接。
另外,我也整理一份正确运营闲鱼的思维导图,有需要的可以回复「闲鱼脑图」获取。
如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。
THANDKS
- End -
python闲鱼机器人_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~相关推荐
- python写闲鱼脚本_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~
1 目 标 场 景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成 ...
- 自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~
1 目 标 场 景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成 ...
- python写闲鱼脚本_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了
1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...
- 自动化,躺着收钱!闲鱼自动发货机器人来啦~
点击"简说Python",选择"星标公众号" 福利干货,第一时间送达! 图片by@unsplash 本文授权转载自AirPython,禁二次转载 作者:星安果 ...
- python 淘宝客服 机器人_Python实现资源代下|实现机器值守|全自动淘宝自动发货机器人...
原标题:Python实现资源代下|实现机器值守|全自动淘宝自动发货机器人 发货机器人 帮你实现:淘宝虚拟商品的自动值守.自动资源下载.自动Email发货 1.运作流程 Trip: 使用小附件方式发送邮 ...
- 躺着收钱!自动发货机器人来啦~
作者 | 星安果 出自 | AirPython(ID:AirPython) 1.目标场景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品 ...
- 躺着收钱月入过万,怎样才能做到?
躺着收钱月入过万.怎样才能做到? 其实有很多方法. 比如今天举一个例子.你有资源.别人想要的商品,市场畅销的货,你能用低于大多数销售商的价格进到货,然后卖给销售商,其实基本就是躺着赚钱了.别说月入过万 ...
- 一款可以适应于拼多多淘宝等店铺虚拟商品自动核销百度网盘自动发货机器人软件助手
前言: 看到很多开虚拟店的小伙伴找不到合适的网盘自动发货机器人软件助手,我也开发了一款,功能很多,先截个图: 1.可以对好友增加\删除\发送消息等操作. 2.可以对群组增加成员\删除成员\发送消息\创 ...
- 【Node.js】制作Steam自动发货机器人(一)
给所有想要制作STEAM自动发货机器人,淘宝自动发货,各种STEAM相关网站的朋友 使用全开源库,让你掌控每一步 语言:NODE(NODE大法好) 平台: WIN /MAC /LINUX 一直在做ST ...
最新文章
- html5 文本框限制,html中input禁止输入(禁止获得焦点)多种方法及input限制数字和长度...
- Android MVC,MVP,MVVM模式入门——重构登陆注册功能
- 142. 前缀统计【trie】
- js实现新闻滚动-单行滚动或者多行滚动
- leetcode 104. Maximum Depth of Binary Tree
- abp的权限与导航菜单的关系
- [html] HTML采用的是RGB颜色还是CMYK颜色?为什么?
- 求离散数据的突变点_数据的离散程度分析1
- Kali Linux 秘籍 第七章 权限提升
- 为了学习Rxjava,年轻小伙竟作出这种事!
- linux 免sudo,linux 创建用户,免密sudo,ssh免密登录
- 海思Hi2115 NB-IOT资料,Hi2115芯片模块介绍
- DCMTK findscu 查询信息
- CentOS 7下载地址(ISO文件)
- WIN7下怎么安装iis教程
- 实现微信小程序的分享转发功能(可以从分享页返回小程序首页)
- FYI | 谷歌的summer project围观一下
- 计算机汉字怎么制作的,如何制作自己的字体?教你快速制作自己手写字体
- 部署ISA2006标准版防火墙
- 初学Python案例之一(开平方代码)
热门文章
- LabVIEW异步调用VI
- 中国石油大学(北京)-《大学语文》-答案
- bib格式导入Endnote——保姆级方法
- php mysql 抽奖_使用jQuery+PHP+Mysql实现抽奖程序
- 【分布式理论】(二)分布式存储
- prince2 成功的项目管理_PRINCE2,结构化的项目管理方法论,化繁为简,聚焦价值,附PPT...
- Python制作一个简单的抽奖软件(二)
- Python:pyinstaller库实现打包代码拷贝到另一台无python环境电脑上运行
- 智能热流体仿真软件AICFD 2023R1新版本功能介绍
- 企业微信回调模式验证URL解码失败解决方案