前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:星安果 AirPython

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


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

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

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

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

github: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

实现

具体的实现思路是:无障碍服务 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
{//主页面Activityprivate static final String PAGE_MAIN = "com.ss.android.ugc.aweme.main.MainActivity";@Overridepublic 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
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();
}

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

  1. 【AI产品】产品小姐姐分析抖音背后的计算机视觉技术

    大家好,今天开设新的专栏<AI产品>,在这个专栏中,我们将以产品体验为主,简单剖析背后的核心技术,这是一个更加贴近工业实践的专栏. 今天就体验抖音基于计算机视觉技术实现的几项高大上的功能, ...

  2. Pythom爬虫之图虫小姐姐图片的爬取:

    Pythom爬虫之图虫小姐姐图片的爬取: 导入库: import jsonpath import time import os 如果没有安装的话,可以通过: pip install 库 # 安装 我们 ...

  3. python3 爬虫实战:mitmproxy 对接 python 下载抖音小视频

    From:https://blog.csdn.net/Fan_shui/article/details/81461253 一.前言 前面我们已经用 appium 爬取了微信朋友圈,今天我们学习下 mi ...

  4. python刷抖音浏览_告别刷抖音!30秒一个Python小例子,总有一款适合你

    小编每天上班坐地铁,不是刷抖音就是煲电视剧,不是我不想学习,主要是短视频太好看了,30秒一个,刷刷刷的不停啊.如果Python也有30秒学习的小例子,我也一定会看呢. 于是小编收录整理了一些30秒一个 ...

  5. 从微信小程序到抖音小程序:转换指南

    抖音小程序是一种新兴的小程序平台,与微信小程序类似,都是基于小程序框架的开发,不过两者的开发环境和API有所不同.如果你已经开发了一款微信小程序,想要将其转换为抖音小程序,可以按照以下步骤进行: 1. ...

  6. 微信小程序和抖音小程序的区别?如何选择?

    随着5G的到来,电商向多元化新型电商的转型也已成时代必然.2020年,当我们的Vlog.自媒体行业风生水起时,依托第三方的电商平台销售模式已经逐渐难以满足新型电商的应用场景,例如微信的私域流量.抖音对 ...

  7. 17_微信小程序之抖音微视无限滑动视频列表自定义组件编写

    微信小程序之抖音微视无限滑动视频列表自定义组件编写 一.先上效果图 看到上面,你可能首先会想到,使用swiper然后将swiper的circular设置为true,那么,想象一下,假如视频很多的情况下 ...

  8. WordPress微信小程序,WordPress百度小程序,WordPressQQ小程序,WordPress今日头条小程序,WordPress抖音小程序,WordPress多端小程序

    WordPress微信小程序,WordPress百度小程序,WordPressQQ小程序,WordPress今日头条小程序,WordPress抖音小程序,WordPress多端小程序. WordPre ...

  9. 微信小程序与抖音小程序的区别

    1. 前缀区别:tt 与 wx 2. 调用前一个页面的方法时 微信小程序 let pages = getCurrentPages(); let prePage = pages[pages.length ...

最新文章

  1. textarea怎么占满整个td_怎么知道网上的视频是不是专业摆拍?关注这些细节就可以了...
  2. ROS: catkin和rosmake创建和编译功能包、执行节点
  3. 85. Leetcode 746. 使用最小花费爬楼梯 (动态规划-基础题)
  4. mysql 事务日志备份_事务日志备份与恢复 5
  5. 真实临在--摘自{《信仰在我家》}
  6. 7-14 求整数段和
  7. 只看当前分支_看小姐姐用动图展示10大Git命令
  8. 12306加密传输_前沿一键发送“文图音视频” 支持加密传输、图形密码、保护用户隐私……5G消息要来了!...
  9. dadayi大一c语言累加编程题,c++习题答案中国电力出版社
  10. Vue下载文件不成功及下载文件名称问题
  11. 数据分析:数据分析工具:SPSS、RapidMiner、KNIME、Kettle
  12. LoadRunner录制app脚本详解
  13. 物业公众号推文范例_如何运营社区物业微信公众号
  14. 汇智网node学习笔记
  15. 小马哥-----高仿三星G9006(G900S G900H G900W)拆机主板图与开机界面图 6582芯片主板为S105
  16. 12306参数重要信息记录
  17. 基于8266WIFI模块实现智能手机与51单片机的通信入门
  18. Apche Kylin启动报错:UnknownHostException: node1:2181: invalid IPv6 address
  19. 以太网口差分电平_百兆以太网接口高速PCB布局布线指南
  20. nginx搭建反向代理配置并测试

热门文章

  1. 红帽认证 学习Linux的有效途径
  2. Virtual Box 安装教程/安装步骤
  3. 美国作为供应链风险敞口分析
  4. 帧数达不到144用144hz_144Hz到底比60Hz强哪里?为啥电竞屏都是144Hz?
  5. PAREKR派克柱塞泵PAVC1002R42A22
  6. 荣耀畅玩9a有机会申请鸿蒙系统吗,关于荣耀畅玩9A你不知道了一面,我想分享一下...
  7. LIOM: 一种新的激光惯性里程计和建图方法
  8. HTTP/3: 实用部署选项(第3部分)
  9. 程序员如何追女孩---(声明这是转载)
  10. 破解索尼PS4系列:利用网页漏洞实现相关的ROP攻击(一)