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

本文档介绍如何为闲鱼平台创建一个自动发货机器人,通过解析订单状态并自动化发送网盘链接,提高交易效率。文章详细讲解了代码实现过程,包括订单状态判断、UI界面交互、模拟点击操作以及处理WebView中的元素,最终实现自动发货和确认操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

Python 私信机器人是一种基于 Python 编程语言构建的自动化工具,它能够自动平台上指定的用户送消息、评论等操作。这种机器人主要用于电商自动化领域,特别是在线交易过程中,帮助用户批量处理信息、自动跟进订单、提供客户服务等。 ### 一、基本功能 1. **消息送**:可以设定程序定时或手动触向特定用户送私信、留言等。 2. **数据抓取**:通过爬虫技术抓取商品详情、用户信息等相关数据,用于分析市场趋势或获取客户反馈。 3. **状态监控**:实时监测某款商品的价格变化或其他动态,并根据设置的规则自动回复或提醒。 4. **自动回复**:针对用户的常见询问预先设置好回复模板,当收到相应类型的提问时自动回应。 5. **订单管理**:协助跟踪订单状态,比如自动发货通知、确认收货提醒等。 ### 二、实现步骤 1. **环境准备**:安装 Python 及其基础库如 `requests` 和 `BeautifulSoup` 或者专门的库如 `scrapy` 来处理网页抓取。 2. **账号绑定**:使用第三方服务(如 API 网关服务)与平台对接,获取访问权限并绑定账号。 3. **API 接口调用**:根据提供的官方 API 调用接口来进行各种操作,如送消息、查询商品信息等。 4. **编写脚本**:设计流程逻辑,整合所需的功能模块到 Python 脚本中,通常包括错误处理、日志记录等功能。 5. **测试与优化**:对脚本进行充分测试,调试可能出现的问题,优化性能和用户体验。 ### 三、注意事项 1. **遵守规则**:确保所有操作均符合平台的服务条款及政策,避免违规操作导致账号封禁。 2. **隐私保护**:在处理用户数据时务必注意隐私保护,合法合规地收集和使用个人信息。 3. **效率与成本**:自动化工具虽然提高了工作效率,但也需要考虑运行成本和资源消耗,合理规划任务安排。 ### 四、未来展望 随着 AI 技术的展,未来的 Python 私信机器人可能会具备更高级的能力,如自然语言理解、情绪识别等,进一步提升交互体验和服务效率。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值