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

640?wx_fmt=jpeg

作者 | 星安果   

出自 | AirPython(ID:AirPython)

1.目标场景

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

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

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

640?wx_fmt=jpeg

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

2.编写代码

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

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

640?wx_fmt=png

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

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

/***	
 * 判断订单的状态	
 */	
public static int getOrderStatus(AccessibilityNodeInfo node)	
{	
    List<AccessibilityNodeInfo> 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);

发完消息后,接着查找右上角的「去发货」元素,执行点击操作,模拟去发货。

640?wx_fmt=png

监听到到达「发货界面」的事件之后,查找右上角的「无需寄件」元素,再进行一次点击操作。

//发货界面 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);	
}

通过上面的操作,会弹出一个用于确认发货的对话框。

640?wx_fmt=png

我们接着使用 Android Monitor 查看当前页面的元素信息,发现这个页面除了标题栏,内容区都包含在一个「WebView」里面。

640?wx_fmt=png

由于元素包含在 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 < 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();	

	
            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.结果结论

完成发货之后,执行全局返回的操作,直到页面重新回到闲鱼主界面为止。

当然,也可以在发货完成之后,点击这个商品的重新编辑按钮,修改后再次发布商品,这样就可以实现一件商品「 自动发货、自动上新 」的循环操作。

(*本文为Python大本营转载文章,转载请联系原作者,原文标题:自动化篇:躺着收钱!闲鱼自动发货机器人来啦~)

精彩推荐

由易观携手CSDN联合主办的第三届易观算法大赛正在火热进行中!冠军奖3万元,每人最多邀请5位用户组队参赛。本次比赛主要预测访问平台的相关事件的PV,UV流量(包括Web端,移动端等),大赛将会提供相应事件的流量数据,以及对应时间段内的所有事件明细表和用户属性表等数据,进行模型训练,并用训练好的模型预测规定日期范围内的事件流量。

640?wx_fmt=jpeg

推荐阅读

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
2013-04-03(2.2.1) 1.修复淘宝不确定的BUG 2013-03-08(2.2.0) 1.修复登陆账号密码错误 2013-02-03(2.1.9) 1.修复读取配置失败的BUG 2.修改卡密为无不发送 3.添加淘宝密码RC4加密 4.添加关键字转义检测 2013-02-01(2.1.8) 1.修复短信接口BUG 2.修复短信漏发BUG 3.修复宝贝解析失败BUG 4.修复套餐购物车订单BUG 5.修复宝贝管理模式出错BUG 6.修改库存卡密为倒叙 7.修改已发卡密为倒叙 8.添加淘宝自动登陆 9.添加验证码检测 10.添加淘宝备注写卡密 11.添加今天已发数量 2013-01-10(2.1.7) 1.存在问题版本跳过 2012-11-12(2.1.6) 1.解决启动运行自动退出的BUG 2012-08-31(2.1.5) 1.解决初始运行自动退出的BUG 2012-06-21(2.1.4) 1.彻底解决稳定性问题,不再意外结束进程 2.独创线程智能切换模式,内存结构更加优化 3.老板键修改为2个组合热键,防止其中某个被占用无法使用 4.重新启动自动发货不再需要重复登录淘宝 2012-06-12(2.1.3) 1.更新线程运行方式 2.增强程序运行稳定性 2012-06-11(2.1.2) 1.修改卡密库存和已发卡密刷新逻辑,不再重复刷新 2.修改老板热键为ALT+A键 3.修改线程方式,增强稳定性 4.修改旺旺判断模式,提高旺旺客服工作台效率 5.修改旺旺多开激活模式,完美多开支持旺旺 6.修改客服工作台判断逻辑 2012-06-06(2.1.1) 1.增加支持旺旺客服工作台发送卡密 2.增加淘宝订单备注上添加已发送的卡密,方便事后查询 3.增加旺旺发送对已修改显示名买家的支持 4.增加对旺旺名称特殊符号登陆的支持 5.增加旺旺发送内容自定义的支持 6.增加旺旺超大内容发送的支持 实际测试100000字节发送无问题 7.增加旺旺对发送快捷键Ctrl+Enter的支持 8.增加淘小白任务栏显示 9.增加支持对购物车套餐订单自动评价 10.修复自动评价 11.修复黑名单,宝贝管理,已发卡密中搜索后无法再显示全部记录的BUG(感谢QQ冰封世界进行反馈) 12.修复已发卡密中无法删除的BUG 13.修复某些时候双击托盘图标,淘小白不显示的BUG 14.修复购物车订单被重复订单检测跳过的BUG 15.修复长时间挂机因线程内存泄露崩溃的问题 16.修改旺旺智能补发逻辑,开启后只对已经付款的买家发送后并自动关闭聊天窗口,其他不自动关闭 2012-05-13(2.1.0) 1.增加首创旺旺智能补发,保证旺旺百分百卡密送达(即使对方不让加好友,不接受陌生人消失也可送达) 2.增加支持购物车套餐订单,购物车订单也可自动发货 3.增加旺旺发送异常检测 4.增加导出库存卡密,已发卡密功能 5.修复淘宝密码中有特殊符号无法登陆的BUG 6.修复部分系统旺旺发送失败的BUG 7.修复部分系统使用淘小白过程中IE进程可能增多的BUG 8.修复部分系统淘使用小白过程中内存过大的BUG 9.修复部分系统邮件智能补发无法送达的BUG 10.修复移动182,183号段无法使用短信通知的BUG 11.修复黑名单可重复添加的BUG 12.修复运行记录可能添加错数据库的BUG 2012-04-20(2.0.2) 1.修复部分系统意外退出的BUG 2.修复宝贝管理,无法修改备注等的BUG 3.修复部分系统宝贝名称无法解析的BUG 4.修复删除分类卡密的BUG 5.修复邮箱无法智能补发的BUG 6.修改库存小于设置个数不发货的方式 6.更换提取已付款订单方式,提高效率 7.运行记录和已发卡密改为从下到上刷新 2012-04-18(2.0.1) 1.彻底修复登陆长时间可能检测不到订单的BUG(实际挂机32小时自动发货无异常) 2.修复部分系统兼容性(经Win2003 WinXP Win7测试无异常) 3.修复已经添加宝贝,但还是提示未设置自动发货的BUG 4.修复宝贝不需卡密但还是提示库存不足的BUG 5.支持旺旺超多卡密发送(实际测试2万字符旺旺发送成功) 6.支持淘小白多开(经实际测试,3个淘宝账号自动发货成功) 7.运行记录加入旺旺发送卡密是否成功的记录 8.淘小白发送的广告修改为本次自动发货服务由淘小白提供 2012-04-13(2.0.0) 1.修复已发卡密无记录的BUG 2.增加宝贝限拍件数功能 3.增加旺旺多开功能 4.增加订单二次校验功能 5.优化旺旺发送卡密接口 6.增加邮件补发卡密功能 2012-04-05(1.9.7) 1.修正运行一段时间后失效的BUG 2.修正自动评价乱码 2012-03-26(1.9.6) 1.多个卡密多次发送改为一次发送等,修复卡密发送 2.修复检测订单后总是提示库存不足的BUG 3.修复内存错误1.多个卡密多次发送改为一次发送 2012-03-25(1.9.5) 1.修正淘宝登陆判断条件所导致的失败 2012-03-25(1.9.4) 1.修正淘宝登陆判断条件所导致的失败 2012-03-25(1.9.3) 1.帮助中心界面修改 2.淘宝登陆增加一键快捷登陆 2012-03-23(1.9.2) 1.修正淘宝登陆,支持手机验证码登陆 2.修正卡密修改功能 3.使用教程正式更名为帮助中心,添加公告.历史版本,添加QQ群 4.淘宝登陆后去掉原有的默认保存密码,增加安全性 5.增加运行状态提示 6.增加旺旺发送信息自定义设置 2012-03-21(1.9.1) 1.修正检测订单时弹出的信息框 2012-03-21(1.9.0) 1.UI界面重新设计,更加简洁干净 2.修正软件已经发货,淘宝未发货的BUG 3.增加黑名单,老板键等功能 4.数据库改为access,效率更高,卡密储存量几何级增加

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值