1


目 标 场 景

闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易。

在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成发货,这样显得商品的交易效率很低下。

那能不能做到「自动发货、自动上新」,全程自动化操作发货呢?答案是肯定的。


本篇文章的目的是为闲鱼定制一个「自动发货机器人」,实现商品自动发货的功能。

2


编 写 代 码

上篇文章 已经实现了消息自动回复的功能,本篇文章将继续在这个基础之上去实现自动发货机器人的功能。

首先,我们需要根据聊天界面,对订单的状态进行分类。

闲鱼中一个商品的订单状态包含:交易前、等待买家付款、等待卖家发货、退款等多种状态。

这里,我们只需要把交易前和等待卖家发货两种状态给筛选出来。

/**** 判断订单的状态*/
public static int getOrderStatus(AccessibilityNodeInfo node)
{List<AccessibilityNodeInfo> status_nodes = node.findAccessibilityNodeInfosByViewId(Ids.id_order_status);
<span class="hljs-keyword">int</span> status = <span class="hljs-number">0</span>;
<span class="hljs-keyword">if</span> (<span class="hljs-literal">null</span> == status_nodes || <span class="hljs-number">0</span> == status_nodes.size())
{status = <span class="hljs-number">-1</span>;
} <span class="hljs-keyword">else</span>
{AccessibilityNodeInfo first_node = status_nodes.<span class="hljs-keyword">get</span>(<span class="hljs-number">0</span>);String status_content = first_node.getText().toString();<span class="hljs-comment">//交易前的普通对话</span><span class="hljs-keyword">if</span> (TextUtils.<span class="hljs-keyword">equals</span>(<span class="hljs-string">"交易前聊一聊"</span>, status_content)){status = <span class="hljs-number">0</span>;} <span class="hljs-function"><span class="hljs-keyword">else</span> <span class="hljs-title">if</span> (<span class="hljs-params">TextUtils.<span class="hljs-keyword">equals</span>(<span class="hljs-string">"等待卖家发货"</span>, status_content</span>))</span>{status = <span class="hljs-number">1</span>;} <span class="hljs-function"><span class="hljs-keyword">else</span> <span class="hljs-title">if</span> (<span class="hljs-params">TextUtils.<span class="hljs-keyword">equals</span>(<span class="hljs-string">"等待买家付款"</span>, status_content</span>))</span>{status = <span class="hljs-number">2</span>;} <span class="hljs-keyword">else</span>{status = <span class="hljs-number">3</span>;}}<span class="hljs-keyword">return</span> 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<AccessibilityNodeInfo> center_node = node.findAccessibilityNodeInfosByViewId(Ids.id_center_title);

    List<AccessibilityNodeInfo> 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;
<span class="hljs-comment">//保证能够获取到Web元素</span>
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 < rootNode.getChildCount(); 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 < node.getChildCount(); i++){AccessibilityNodeInfo child = node.getChild(i);// 有时 child 为空if (child == null){continue;}String className = child.getClassName().toString();CharSequence text_raw = child.getText();
        <span class="hljs-keyword">if</span> (<span class="hljs-string">"android.view.View"</span>.<span class="hljs-keyword">equals</span>(className) &amp;&amp; !TextUtils.isEmpty(text_raw)){boolean isClickable = child.isClickable();Log.e(<span class="hljs-string">"xxx"</span>, <span class="hljs-string">"内容是:"</span> + text_raw.toString());<span class="hljs-comment">//isClickable:可点击的按钮,按钮内容是继续</span><span class="hljs-keyword">if</span> (isClickable &amp;&amp; TextUtils.<span class="hljs-keyword">equals</span>(content, text_raw.toString())){child.performAction(AccessibilityNodeInfo.ACTION_CLICK);<span class="hljs-keyword">break</span>;}}<span class="hljs-comment">// 递归调用</span>findEveryViewNode(child, content);}}

}

下载地址:https://pan.baidu.com/s=/16u4QXR_gOlvBKBNwQyS5FA

自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~相关推荐

  1. python写闲鱼脚本_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~

    1 目 标 场 景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成 ...

  2. python闲鱼机器人_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~

    阅读文本大概需要 10 分钟. 1 目 标 场 景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品被买家拍下并付款后,都需要一段时间的等 ...

  3. 自动化,躺着收钱!闲鱼自动发货机器人来啦~

    点击"简说Python",选择"星标公众号" 福利干货,第一时间送达! 图片by@unsplash 本文授权转载自AirPython,禁二次转载 作者:星安果 ...

  4. python写闲鱼脚本_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...

  5. 闲鱼python_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    image 阅读文本大概需要 8 分钟. 1.目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该 ...

  6. 自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    点击上方"AirPython",选择"置顶公众号" 第一时间获取 Python 技术干货! 阅读文本大概需要 8 分钟. 1 目 标 场 景 前篇文章讲了如何在 ...

  7. 躺着收钱!自动发货机器人来啦~

    作者 | 星安果 出自 | AirPython(ID:AirPython) 1.目标场景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品 ...

  8. 躺着收钱月入过万,怎样才能做到?

    躺着收钱月入过万.怎样才能做到? 其实有很多方法. 比如今天举一个例子.你有资源.别人想要的商品,市场畅销的货,你能用低于大多数销售商的价格进到货,然后卖给销售商,其实基本就是躺着赚钱了.别说月入过万 ...

  9. 闲鱼自动收货源码最新版本+搭建教程

    闲鱼自动收货源码最新版本+搭建教程 搭建很简单 上传源码解压 php版本7.4 不需要数据库 后台路径:域名/admin 后台账号:admin 后台密码:123456 下载链接:https://pan ...

最新文章

  1. Python 进度条 tqdm
  2. 青龙面板跑滴滴果园,5天种水果。
  3. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】...
  4. matlab rootdir,Python cfg.ROOT_DIR属性代码示例
  5. 拒绝职场危机,程序员最核心的竞争力是什么?
  6. pip强制更新包版本
  7. 《软技能:代码之外的生存指南》一一21.3 打造成功博客的秘诀
  8. linux系统 远程桌面连接到服务器,Ubuntu 14.04服务器远程桌面连接
  9. Spring : 依赖注入(IoC)控制反转
  10. 解压zip报错_Get新技能!利用Python自动解压各种压缩文件
  11. Linux CentOS 7 JDK7 Tomcat7 的配置
  12. JZOJ4816. label
  13. delphi的时间Ttime,Tdatetime的信息
  14. 2020-我的跑步之路
  15. 《科技创业启示录》一第1章 乔斯·怀特
  16. html给图片绝对定位,html相对定位和绝对定位
  17. 随便拍几张照片赚了3K,近期的风口视频项目
  18. easyExcel设置水印
  19. FFmpeg 集成 x265 编译及解码
  20. 自动与Internet时间服务器同步

热门文章

  1. 中国电视企业逆势增长,助推中国制造走向世界
  2. 边沿检测电路的多种实现
  3. 叮咚上市,我的前同事挣了1个亿!
  4. 2022年全球市场预混鸡尾酒总体规模、主要生产商、主要地区、产品和应用细分研究报告
  5. Redis_学习笔记
  6. 网易帐号通帮你一一列举邮箱注册过的所有网站
  7. Windows下安装python2与python3以及分别对应的virtualenv
  8. 项目总结之Basler相机的调用
  9. 黑盒测试方法四(正交实验法)
  10. 前端访问不到本地图片,IDEA设置Tomcat虚拟路径