2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

如何结合爬虫与自动化,帮助小姐姐刷抖音完全解放掉双手

时间:10-12来源:作者:点击数:69

1. 场景

你是否在为洗碗时,刷抖音需要滑动屏幕,导致屏幕沾上水而烦扰?

你是否为在吃饭时刷抖音,由于手机屏幕过大,导致手指滑动视频不方便而苦恼?

又或者是,冬天躺在被窝刷抖音,你是否为频繁伸出手去切换视频,而烦躁不安?

本篇文章将大家利用自动化与爬虫,精准地刷抖音,完全解放自己的双手,做一回真正的懒人

2. 实现

具体的实现思路是:无障碍服务AccessibilityService负责抖音 App 的 UI 自动化操作,Jsoup负责爬取抖音视频的基本信息,包含每条视频的时长,最后保证每一条视频播放完成后,立马滑动到下一个视频

下面通过 6步实现

第 1 步,使用 Andriod Studio 新建一个 Android 项目,使用 Gradle 新增依赖

  • //build.gradle
  • //新增依赖
  • dependencies {
  •     //jsoup负责爬虫
  •     implementation 'org.jsoup:jsoup:1.13.1'
  •     //JSON数据解析
  •     implementation 'com.alibaba:fastjson:1.2.70'
  • }

第 2 步,并新建一个无障碍服务,用于处理抖音页面变动的事件

  • //DouYinService.java
  • //无障碍服务
  • public class DouYinService extends BaseService
  • {
  •     //主页面Activity
  •     private static final String PAGE_MAIN = "com.ss.android.ugc.aweme.main.MainActivity";
  •     @Override
  •     public void onAccessibilityEvent(AccessibilityEvent event)
  •     {
  •         String className = event.getClassName().toString();
  •         if (TextUtils.equals(PAGE_MAIN, className))
  •         {
  •            //事件处理
  •         }
  •     }
  • }    

第 3 步,获取单个视频的分享地址

图片

首先,模拟点击分享按钮,跳转到视频分享对话框

  • //DouYinService.java
  • //分享按钮id
  • private static final String ID_SHARE = "com.ss.android.ugc.aweme:id/f4j";
  • //查找分享按钮
  • AccessibilityNodeInfo shareElement = findViewByID(ID_SHARE);  
  • //模拟点击操作
  • performViewClick(shareElement);

需要注意的是,分享对话框首次展示时,复制视频链接的按钮不可见

图片

因此,需要在分享对话框界面底部左滑,直到复制视频链接的按钮可见

接着执行点击操作,将当前视频的地址复制到系统剪切板

  • //DouYinService.java
  • //向左滑动到复制按钮可见
  • while (true)
  • {
  •     if (null == findViewByIDAndText(ID_SHARE_TAG, TEXT_SHARE_TAG))
  •     {
  •           break;
  •     }
  •     AccessibilityNodeInfo copyElement = findViewByIDAndText(ID_COPY_LINK, TEXT_COPY_LINK);
  •     if (null == copyElement)
  •     {
  •           Runtime.getRuntime().exec("adb shell input swipe 900 1600 300 1600");
  •     } else
  •     {
  •           Log.d("xag""找到复制按钮,执行点击操作");
  •           performViewClick(copyElement);
  •           result = true;
  •           break;
  •     }
  • }

第4步,获取视频真实地址

从系统剪切板中读取内容,然后利用正则表达式过滤出当前视频真实的分享地址

  • //StringUtil.java
  • /***
  •  * 利用正则表达式过滤出真实的视频地址
  •  * @param data
  •  * @return
  •  */
  • public static String findUrlByStr(String data)
  • {
  •     Pattern pattern = Pattern.compile("https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]");
  •     Matcher matcher = pattern.matcher(data);
  •     if (matcher.find())
  •     {
  •         return matcher.group();
  •     }
  •     return "";
  • }

第5 步,爬取视频时长

拿到视频的真实地址之后,用 Chrome 浏览器打开进行分析,发现会进行一次重定向

图片

使用 Jsoup 模拟上面的操作,连接视频的分享地址,获取视频重定向后的 URL 地址

  • import org.jsoup.Connection;
  • import org.jsoup.Jsoup;
  • //获取重定向的url
  • url = Jsoup.connect(url)
  •       .followRedirects(true)
  •       .execute().url().toExternalForm();

分析发现,重定向后的地址包含了视频的 ID

图片

并且,下面发送的这个请求参数中恰好包含视频 ID,返回结果中包含了视频的时长等信息

图片

因此,我们只需要从地址中过滤出视频 ID,然后模拟上面的请求即可

  • //获取视频ID
  • String item_id = StringUtil.getSubUtil(url, "video/(.*?)/\\?region").get(0);
  • //新的地址
  • String new_url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + item_id;
  • Connection connection = Jsoup.connect(new_url).ignoreContentType(true);
  • Connection data = connection.headers(Header.generateHeader());
  • //请求结果
  • String result = data.get().body().html();

最后,新建一个实体类 VideoNewItem,使用FastJson进行数据解析,提取出视频的时长

  • //解析数据
  • VideoNewItem item = JSON.parseObject(result, VideoNewItem.class);
  • //获取视频时长(毫秒)
  • int videoDuration = item.getItem_list().get(0).getDuration();
  • Log.d("xag""视频时长:" + videoDuration + ",开始等待。。。");

第 6步,视频等待

拿到视频的时长之后,就可以执行等待操作,然后向上滑动页面跳到下一个视频

  • //倒计时,等待时间播放完成
  • Thread.sleep(videoDuration);
  • Log.d("xag""等待完成,准备滑到下一个视频");
  • //滑动到下一个视频
  • try
  • {
  •     Runtime.getRuntime().exec("adb shell input swipe 600 1200 600 600");
  • catch (IOException e)
  • {
  •     e.printStackTrace();
  • }

3. 最后

重复上面的操作,即可以爬取视频时长,自动刷抖音短视频,完全解放掉双手

已经将文中全部源码上传:https://github.com/xingag/app_spider/tree/master/%E6%8A%96%E9%9F%B3-%E8%87%AA%E5%8A%A8%E5%88%B7%E6%8A%96%E9%9F%B3

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐