刷金币全自动脚本 | 让Python每天帮你薅一个早餐钱(送源码)

测试开发社区  6天前

文章转载自公众号  AirPython , 作者 星安果

阅读文本大概需要 12 分钟。

1

目 标 场 景

以今日头条极速版为首,包含趣头条、东方头条、全名小视频在内的 App 都有看新闻、视频送金币的活动,当金币达到一定量后,就可以提现到微信、支付包。

如果单纯靠人工去点击看新闻和视频,会浪费很多时间。本文的目标是利用 Python 驱动手机去看新闻和视频,每天帮我们薅一个早餐钱。

下面以「东方头条」客户端为例展开说明。

2

准 备 工 作

元素的定位需要借助 Airtes,需要在 PC 端进行安装,具体可以参考上一篇。另外这里以 Android 系统手机为例,所以提前配置好了 adb 环境。

另外,需要在虚拟环境内安装「pocoui」库。

pip3 install pocoui

3

分 析 思 路

首先我们需要利用 adb 命令打开东方头条 App。

使用 Android Studio 的 Analyze Apk 工具,可以获取应用包名和初始 Activity 分别是:

com.songheng.eastnews

com.oa.eastfirst.activity.WelcomeActivity

然后使用「adb shell am start」命令去打开东方头条的客户端。

# 应用包名
package_name = 'com.songheng.eastnews' # 初始Activity
activity = 'com.oa.eastfirst.activity.WelcomeActivity' def start_my_app(package_name, activity_name):
    """
    打开应用
    adb shell am start -n com.tencent.mm/.ui.LauncherUI
    :param package_name:
    :return:
    """
    os.popen('adb shell am start -n %s/%s' % (package_name, activity_name)) start_my_app(package_name, activity)

由于第一次打开应用,会有一个显示广告的界面,我们需要通过 Airtest 获取到「跳过广告」元素,执行点击操作,让应用快速进入到主页面。

def __pre_and_skip_ads(self):
        """
        预加载和跳过广告
        :return:
        """
        # 1.广告页面元素的出现
        # 两种样式:跳过、跳过广告*秒         try:
            poco('com.songheng.eastnews:id/aoy').wait_for_appearance(10)
        except Exception as e:
            print('等待广告元素异常')
            print(e)         ads_element = poco(name='com.songheng.eastnews:id/aoy', textMatches='^跳过广告.*$')
        ads_element1 = poco(name='android.widget.TextView', text='跳过')         # 跳过广告(0s)
        if ads_element.exists():
            print('跳过广告1!!!')
            ads_element.click()
        if ads_element1.exists():
            print('跳过广告2!!!')
            ads_element1.click()         # 2.等到到达主页面
        poco('com.songheng.eastnews:id/g_').wait_for_appearance(120)

到达主页面之后,我们发现主要有 3 种方式获取金币,分别是「阅读文章」、「播放视频」、「播放小视频」,另外一种获取金币的方式就是归纳于其他方式中。

首先,我们使用 Airtest 来分析新闻 Tab 的列表。

新闻列表可以通过获取 name 为「com.songheng.eastnews:id/g_」 的元素,再取其所有子元素就能获取到第一页的新闻列表。

lv_elements = poco('com.songheng.eastnews:id/g_').children()

if not lv_elements.exists():
    print('新闻列表不存在')
    return # 遍历每一条新闻
for news_element in lv_elements:
    # 新闻标题
    news_title = news_element.offspring('com.songheng.eastnews:id/pb')     #作者
    author_element = news_element.offspring('com.songheng.eastnews:id/a4f')

需要注意的是,上面获取的新闻列表中有很多广告和点击下载的内容,需要过滤掉。

# 4.过滤广告
# 到这里标识此条新闻:是一条有效的新闻【包含广告】
# 注意:部分广告【包含点击标题就自动下载,左下角显示广告字眼等】要过滤掉
# 场景一:
if news_element.attr('name') == 'android.widget.FrameLayout':
    print('广告!这是一个FrameLayout广告,标题是:%s' % news_title.get_text())
    continue # 常见二:点击标题直接下载其他应用
ads_tips_element = news_element.offspring(name='com.songheng.eastnews:id/a4f', text='广告通')
if ads_tips_element.exists():
    print('广告!这是一个【广点通】广告,标题是:%s' % news_title.get_text())
    continue # 常见三:有效角标识是广告的图标【奇虎广告】
ads_tips_element2 = news_element.offspring('com.songheng.eastnews:id/q5')
if ads_tips_element2.exists():
    print('广告!广告标题是:%s' % news_title.get_text())
    continue

只有判断是一条正常的新闻,才点击新闻的标题元素进入新闻详情页面,如果右下角的「时间条元素」存在才代表阅读此篇新闻能获取到金币。

red_coin_element = poco('com.songheng.eastnews:id/aq8')
if not red_coin_element.exists():
     print('当前新闻没有红包,返回!')
     self.__back_keyevent()
     continue

为了更真实的模拟人为看新闻这一操作,随机地模拟向上或向下滑动屏幕。

这里设置每篇文章阅读时间为 30 秒,阅读完成之后,执行返回操作,直到回到主界面,这样就完成了查看一篇新闻获取金币的流程。

oldtime = datetime.datetime.now()
while True:
      self.__swipe(True if random.randint(0, 1) == 0 else False)       newtime = datetime.datetime.now()
      interval_time = (newtime - oldtime).seconds
      if interval_time >= 30:
           print('阅读30秒新闻完成')
           break
           self.__read_key_news()

接着可以从下往上滑动页面,获取到新的页面的新闻列表,循环的进行阅读。

 while True:
       self.watch_news_recommend()        print('查看一页完成,继续查看下一页的新闻。')        # 滑动下一页的新闻
       poco.swipe([0.5, 0.8], [0.5, 0.3], duration=1)

另外,注意应用的标题栏隔一段时间可以领取金币,定义一个方法去领取。

def get_top_title_coin(self):
        """
        顶部金币领取
        仅仅在新闻首页的时候才可以领取
        :return:
        """
        get_coin_element = poco(name='com.songheng.eastnews:id/arq', text="领取")         if get_coin_element.exists():
            print('顶部有金币可以领取!')
            get_coin_element.click()             print('领完金币后可以关闭对话框!')
            # 关掉对话框
            self.__back_keyevent()
        else:
            print('顶部没有金币或者不在首页')

然后可以点击视频 Tab 去切换到视频页面。和看新闻一样,这里同样是获取视频列表元素去遍历查看视频。

 def __video(self):
        """
        查看视频
        :return:
        """
        poco('com.songheng.eastnews:id/ko').click()         while True:
            # 视频列表
            poco('com.songheng.eastnews:id/a0z').wait_for_appearance()
            sleep(2)             self.__read_key_news()             video_elements = poco('com.songheng.eastnews:id/a0z').children()             print('video items是否存在:')
            print(video_elements.exists())             # 遍历视频
            # 注意:视频播放完全可以提前返回
            for video_element in video_elements:
                # 1.标题元素
                video_title_element = video_element.offspring('com.songheng.eastnews:id/a3q')
                # 播放按钮
                video_play_element = video_element.offspring('com.songheng.eastnews:id/nj')                 # 2.必须保证【视频标题】和【播放按钮】都可见
                if not video_title_element.exists() or not video_play_element.exists():
                    continue                 # 3.标题
                video_title = video_element.offspring('com.songheng.eastnews:id/a3q').get_text()                 print('当前视频的标题是:%s,播放当前视频' % video_title)                 # 点击播放视频
                video_play_element.focus("center").click()                 # 4.播放视频
                self.play_video()                 print('播放下一个视频')                 self.__back_keyevent()             # 滑动到下一页的视频
            poco.swipe([0.5, 0.8], [0.5, 0.3], duration=0.2)

观看小视频获取金币的操作最为简单。首先切换到小视频 Tab,获取到第一个视频的元素,执行点击操作,开始播放小视频。

poco('com.songheng.eastnews:id/kr').click()

# 加载出列表元素,点击第一项进入
poco('com.songheng.eastnews:id/a0p').child('com.songheng.eastnews:id/g_').wait_for_appearance(60)
poco('com.songheng.eastnews:id/a0p').child('com.songheng.eastnews:id/g_').children()[0].click()

最后只需要等待视频播放 30 秒之后,使用 swipe 函数向左滑动屏幕切换到下一个视频,就可以实现反复播放获取金币的操作。

while True:
      sleep(30)
      # 向左滑动
      poco.swipe([0.9, 0.5], [0.1, 0.5], duration=0.2)

4

结 果 结 论

执行程序,手机会自动打开东方头条客户端,执行阅读新闻、看视频和小视频的一系列操作。

最后只需要将阅读新闻、播放视频和小视频的时间分配好,一个客户端获取金币达到上限后,就关闭应用,然后切换到其他 App 客户端,继续阅读新闻和视频,就可以实现薅多个平台的羊毛。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

我已经将看新闻刷金币全自动化脚本全部源码上传到github上:https://github.com/xingag/app_spider/tree/master/%E4%B8%9C%E6%96%B9%E5%A4%B4%E6%9D%A1

阅读原文

刷金币全自动脚本 | 让Python每天帮你薅一个早餐钱(送源码)的更多相关文章

  1. 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码

    [实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...

  2. python编程从入门到实践 alien invasion 项目源码

    现在上传一个 python编程从入门到实践 alien invasion 项目源码 以供大家学习参考 跟官方版本可能不太一样,因为是自己写的 也算是给新手一个参考 我用的环境是pycharm 可能需要 ...

  3. Python实用案例,Python脚本,Python实现帮你选择双色球号码

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 前言: 今天我们就利用python脚本实现帮你选择双色球号码.直接开整~ 开发工具: python版本: 3 ...

  4. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

  5. python HtmlTestRunner python2.x python3.x报告优化模板源码下载

    文件py压缩包下载地址https://files.cnblogs.com/files/SunshineKimi/HtmlTestRunner2.x_3%2Cx.rar 源码拷贝如下: python 2 ...

  6. Python爬虫一爬取B站小视频源码

    如果要爬取多页的话 在最下方循环中 填写好循环的次数就可以了 项目源码 from fake_useragent import UserAgent import requests import time ...

  7. python实现简易工资管理系统(Salary Manage)源码

    一.需求: 1.导入文件读取员工的信息和工资信息,最后将增加.删除或修改的员工工资信息写入原来的文件中 2.能够实现员工工资信息的增删改查 3.当增加和修改员工信息时用户用空格分隔员工姓名和薪资 4. ...

  8. Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    目录 1.      写在前面 2.      开发环境 3.      大致流程 4.      框架简介 5.      运行结果展示 6.      文件与配置 7.      测试接口实例 n ...

  9. Python机器学习/LinearRegression(线性回归模型)(附源码)

    LinearRegression(线性回归) 2019-02-20  20:25:47 1.线性回归简介 线性回归定义: 百科中解释 我个人的理解就是:线性回归算法就是一个使用线性函数作为模型框架($ ...

随机推荐

  1. python如何在一个for循环中遍历多个列表

    推荐使用python内置函数zip,它可以将x个y维列表变成一个zip对象,将zip对象拆包可以发现它变成了y个x维元组.我们还可以将这个对象变成一个元组或列表.如下所示: 如果是两个列表的zip,我 ...

  2. 网站的ssl证书即将过期,需要续费证书并更新

    SSL这个证书的续费也挺奇怪,续费跟新购买一样. 证书这个东西,申请成功之后,每次都要重新下载,需要处理好格式之后,放在服务器的指定目录里. 大致操作如下: 首先,申请/续费证书,证书下来后,下载下来 ...

  3. 大言不惭 swank? talk about sth or speak too confidently cán,意思是指说大话而毫不感到难为情。出自《论语·宪问》:“子曰:‘其言之不怍,则为之也难。’”宋·朱熹注:“大言不惭,则无必为之志,而不自度其能否也。欲践其言,其不难哉!” 是不是类似于 swank?

    大言不惭 swank? talk about sth or speak too confidently cán,意思是指说大话而毫不感到难为情.出自<论语·宪问>:“子曰:‘其言之不怍,则 ...

  4. leetcode 17 电话号码的数字组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. class Solution { List<String ...

  5. Durandal入门

    参考:http://www.360doc.com/content/14/1223/11/13819_435123743.shtml 示例代码下载地址:http://durandaljs.com/ver ...

  6. Python运维中常用的_脚本

    前言 file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件. ...

  7. 52)PHP,加了单例模式的数据库代码

    <?php class db { public $host ;//= "localhost";//定义默认连接方式 public $User;//= "root&q ...

  8. 头次接触wamp服务器、xampp,初次单独使用tomcat部署

    刚刚经过了近两天的接触wamp.xampp.tomcat的时光,真的爽 导师有个网站打不开了,就让我去弄,还有一个网站的后台密码忘了,让我帮忙找回来.我第一感觉就是第一个活不简单,第二个还不简单吗?打 ...

  9. TPO1-3 Timberline Vegetation on Mountains

    Wind velocity also increase with altitude and may cause serious stress for trees,as is made evident ...

  10. web前端知识day01_HTML

    一.HTML入门案例(静夜思) 1.概述 HTML:Hyper Text Markup Language 超文本标记语言超文本:比普通文本功能强大,能实现不同样式(比如加粗,居中,斜体)标记语言:使用 ...