python自动化赚钱-薅羊毛

2023-10-27

1

目 标 场 景

最近,有一个朋友告诉我,她在某平台上购买了一部手机,收到货之后发现商品质量挺好的,价格也不贵。

临了随手给了个好评,商家最后还给她发一个 小红包,她把这个商品分享给了我。

本篇文章的目的是利用Python 自动化完成商品购买的操作。

ps:本文仅限用于技术交流,请勿用于其他用途。

2

准 备 工 作

在编写代码之前,需要做如下准备工作:

1、配置好 Android ADB 开发环境

2、Python 虚拟环境内安装 pocoui 依赖库

3、操作剪切板的应用 APK,下载链接见文末

3

编 写 代 码

我们分7 个步骤来实现这个功能,分别是:打开目标应用客户端、搜索关键字到商品列表界面、裁剪原图拿到商品主图、商品匹配、商品收藏和浏览、购买商品、获取订单号和截图。

第1步,使用 Airtest 自动化打开目标应用。# 目标应用

package_name = '应用包名'

activity = 'Home Activity'

def __pre(self):

"""

准备工作

:return:

"""

# 删除缓存文件

remove_cache('./part.jpg', './screenshot.png', './uidump.xml')

home()

stop_app(package_name)

start_my_app(package_name, activity)

打开应用之后,就可以进行第2步操作了。

通过预先得到的关键字,置入到输入框中,然后点击搜索按钮,一直等待搜过列表出现为止。

需要注意的是,有些控件元素需要点击多次才能算一次有效的点击事件。def __search_good_by_key(self):

"""

通过关键字搜索商品

:return:

"""

self.poco(id_page_main_button_search).wait(5).click()

perform_view_input(self.poco, id_page_search_edittext_search, self.key)

# 点击搜索

self.poco(id_page_search_button_search).wait_for_appearance()

while self.poco(id_page_search_button_search).exists():

print('点击一次搜索')

perform_view_id_click(self.poco, id_page_search_button_search)

# 等待列表加载出来

self.poco(id_page_goods_rv).wait_for_appearance()

第 3步,剪切原图,需要对原图中多余的白色区域进行删除,只保留左侧的商品主图。

通过 遍历 x 轴、y 轴,拿到每一个像素的颜色值,如果是连续的白色就做一个标识,进而拿到主图的上、下、左、右坐标值,最后利用 cv2 库进行裁剪,得到商品主图。def crop_main_img(img_path):

"""

获取商品主图

:return:

"""

img = cv2.imread(img_path)

# 图片大小(高、宽、the pixels value is made up of three primary colors)

size = img.shape

img_height = size[0]

img_width = size[1]

channels = size[2]

# 1080*458

print(f'图片宽度:{img_width},高度:{img_height}'

# 标识数组,针对x轴和y轴

arr_x = []

arr_y = []

# 遍历宽,得到主图的x轴坐标

for x in range(img_width):

is_black = True

# 遍历高

for y in range(img_height):

# 获取颜色值

color_position = img[y, x]

if (color_position == color_white).all():

pass

else:

is_black = False

arr_x.append(is_black)

# 遍历高,得到主图的y轴坐标

for y in range(img_height):

is_black = True

# 遍历高

for x in range(img_width):

# 获取颜色值

color_position = img[y, x]

if (color_position == color_white).all():

pass

else:

is_black = False

arr_y.append(is_black)

position_x = get_space_index(arr_x)

position_y = get_space_index(arr_y)

main_img_path = "./head_img.jpeg"

# 剪切

# 裁剪坐标为[y0:y1, x0:x1]

cropped = img[position_y[0]:position_y[1], position_x[0]: position_x[1]]

cv2.imwrite(main_img_path, cropped)

return main_img_path

第4步,商品匹配。

拿到商品主图之后,利用 Airtest 在当前页面进行元素查找,如果没有找到,就滑到下一个元素;否则,就拿到匹配商品的坐标。def __search_good_from_list(self):

"""

从列表中匹配商品

:return:

"""

# 循环的图片查找

while True:

try:

pos = loop_find(Template(self.main_img_path), timeout=10, threshold=0.95)

except TargetNotFoundError:

print('滑动一页')

self.__swipe(True)

else:

print('找到了')

# 屏幕宽度和高度

screen_size = self.poco.get_screen_size()

print(screen_size)

# 点击的坐标点(宽、高)

# (0.22407407407407406, 0.8550925925925926)

position_click = (pos[0] / screen_size[0], pos[1] / screen_size[1])

print(position_click)

self.poco.click(position_click)

break

第5步,商品收藏和浏览。

跳转到商品信息界面之后,先收藏商品,然后跳转到商品详情页面和评论页面。

在预先设置的浏览时间内,执行休眠、滑动操作。def __browser_good_detail(self):

"""

浏览商品

:return:

"""

# 切换到详情Tab

self.poco('com.**:id/taodetail_nav_bar_tab_text', text='详情').click()

# 滑动时长为: self.browser_detail_time

browser_start = datetime.datetime.now()

browser_end = browser_start

while (browser_end - browser_start).seconds < self.browser_detail_time:

# 休眠一会

time.sleep(random.randint(2, 5))

# 滑动一次

self.__swipe(True)

# 结束时间

browser_end = datetime.datetime.now()

print('详情页面查看完毕')

第6步,购买商品。

商品的购买操作很简单,只要点击一个购买按钮即可完成;基于安全考虑,这里选择收货地址、输入支付密码手动输入。def __buy_good(self):

"""

购买商品

:return:

"""

# 立即购买

self.poco('**/detail_main_sys_button', text='立即购买').click()

# 选择商品属性

sleep(10)

# 确定购买

self.poco('**/confirm_text', text='确定').parent().click()

# 提交订单

self.poco(text='提交订单').click()

# 手动输入密码或者指纹

sleep(10)

第7 步,获取订单 ID 及商品截图。

通过 Monitor 观察发现,订单号文本元素很难通过属性或者子、父关系拿到。

可以通过点击复制按钮,将订单号粘贴到系统的剪切板,然后利用 adb + clipper 这款 App拿到剪切板中的内容。def __get_order_no(self):

"""

获取订单编号

:return:

"""

global copy_element

while True:

# 由于手机屏幕的限制,【复制】按钮第一页不一定能显示出来

try:

copy_element = self.poco(text='复制')

except Exception as e:

print('没有找到元素,往下滑动一页')

self.__swipe(True)

break

# 复制到剪切版本

copy_element.click()

# 从剪切板拿到数据

result = exec_cmd('adb shell am broadcast -a clipper.get')[1]

# 匹配出订单号

result = re.findall(r'data="(.*)"', result)

order_no = ''

if result and len(result) > 0:

order_no = result[0]

print(order_no)

return order_no

接着利用 adb 命令截取当前屏幕,然后保存到 PC 端,即完成了全部操作。def get_order_pic(self):

"""

拿到订单截图界面

:return:

"""

screenshot_pic_result = './order_screenshot.png'

# 截取手机当前屏幕

exec_cmd('adb shell /system/bin/screencap -p /sdcard/screenshot.png')

# 保存到PC端

exec_cmd('adb pull /sdcard/screenshot.png %s' % screenshot_pic_result)

return screenshot_pic_result

4

结 果 结 论

通过以上的步骤,即可以完成自动化挑选商品、浏览、购买等一系列操作。

需要补充的是,由于手机分辨率的不一致,导致商品主图匹配会存在一定的误差;但由于主图宽、高比是一致的,可以通过缩放图片达到 适配的目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python自动化赚钱-薅羊毛 的相关文章

  • (转)JAVA常见异常

    0 需要标识符 a 不在函数内 1 非法表达式开始 b 可能 丢失括号 2 no data found a 可能 setInt 1 100 中 没有100这个值 3 找不到符号 a 可能 没导入包 4 指定了无效URL a 可能 数据库名或
  • pyqt_点击button("添加")弹出新的页面

    目标 通过点击主窗口中的button弹出另一个窗口页面 首先需要注意的是 两个窗口不能是同一类型 否则会崩溃 并保存为名称不同的ui文件 并使用UIC工具转成 py文件 因此在目前文件夹中既有mainwindow又有dialog窗体形式的界
  • CGAL的使用

    1 C 类的知识 因为CGAL是用C 实现的 所以需要先了解一下C 编程 C 是面向对象的编程 这也是C 对C语言改进的最重要的部分 C 也被叫做是 带类的 C 简单讲一下类的构成 成员函数以及对象的定义和使用 1 1 C 类的构成 首先从
  • godaddy服务器内网站转移,2021年Godaddy最新域名转出教程

    因为之前Goddady登录界面修改的原因 导致部分新手不知道Godaddy域名转出步骤 笔者特此做了一个简单的教程 供大家学习和参考 第一步 打开Godaddy官网 登录Godaddy账户 然后点击页面右侧的My Account 进入账号管
  • xmlns:android="http://schemas.android.com/apk/res/android"详解

    在Android的layout文件夹下的 xml文件中 开头有一条配置语句 xmlns android http schemas android com apk res android 1 整句话的作用是声明命名空间的引用 2 xmlns是
  • AI+无线通信

    1 赛题与数据 官方介绍已经比较清楚了 按照需要下载对应的文件 博主使用的是pytorch版本 2 代码的本地部署 2 1 文件列表 示例程序文件有以下几个文件 Model define pytorch py 在这个文件设计网络结构 设计
  • 独家

    作者 Faizan Shaikh 翻译 季洋 校对 王雨桐 本文约2700字 建议阅读10 分钟 本文将展示如何使用开源工具完成一个人脸识别的算法 引言 计算机视觉和机器学习已经开始腾飞 但是大多数人并不清楚计算机在识别一张图片的时候 它到
  • 分库表数据倾斜的处理让我联想到了AKF模型

    1 背景 最近在做需求的时候需要在一张表中增加一个字段 这张表情况如下 1 拆分了多个库多张表 2 库表拆分按表中商户编码字段hash之后取模进行拆分 由于库表拆分按照商户编码 有些大商家的单子数量远远要高于其他普通商家 这样就造成了严重的
  • Visual Studio中的Class Designer设计工具需要您的建议!

    2007年07月30日 23 01 00 帮同事Post一下相关调查 有兴趣的朋友可以参加一下 谈谈自己对Class Designer工具的看法 大家好 Class Designer是Visual Studio里的一个工具 可以将类之间的结
  • 7月7日下午!GLM大模型技术前沿与应用探索

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 随着AIGC时代的到来 大型语言模型逐渐成为学术界和工业界的关注焦点 近期 各种大语言模型的涌现给自然语言处理领域的研究带来了诸多挑战 也逐渐对计算机视觉和计算机生物等领域产生了
  • STM32 Keil:warning: #223-D: function "LED_Init" declared implicitly

    include stm32f10x h include led h int main LED Init while 1 GPIO SetBits GPIOD GPIO Pin 6 运行时警告 warning 223 D function L
  • 代码随想录训练营第十一天

    1 有效的括号 LeetCode 题20 https programmercarl com 0020 E6 9C 89 E6 95 88 E7 9A 84 E6 8B AC E5 8F B7 html E8 BF 9B E5 85 A5 E
  • day15

    LeetCode102 层序遍历二叉树 package algor trainingcamp import algor junior algor tree TreeNode import java util ArrayList import
  • 高清变脸更快更逼真!比GAN更具潜力的可逆生成模型来了

    昨天上市即破发的小米 今天上午股价大涨近10 这下雷军要笑了 而且可以笑得更灿烂 更灿烂是什么样 来 我们用OpenAI刚刚发布的人工智能技术 给大家展示一下 当然这个最新的技术 不止这点本事 它的 想象力 很强大的说 比如 留胡子的硬汉版
  • Unity 2022 (Windows 10) 每次打开项目都会弹出"Unity is running as administrator"

    1 Win R 输入 control 打开控制面板 2 找到 用户账户 gt 更改用户账户控制设置 3 将滑块调用中间 仅当应用尝试更改我的计算机时通知我 默认 4 重启电脑
  • 关键帧动画html例子,关键帧

    关键帧 keyframes 在CSS中 keyframes根据你定义的样式规则来更有效的控制动画队列中的每一个中间步骤 或者每一个路径点 用 keyframes来制定动画规则会比使用transition 过渡 来获得更细腻更全面的动画效果
  • 【姿态估计】

    https arxiv org pdf 1910 06278 pdf 关键点标签编码 encoding 训练人体姿态估计网络时 考虑到训练代价 通常会将将输入图片做降采样 在降采样后的分辨率上进行训练 为了网络能够以热度图为标签进行训练 需
  • 【深度学习】一分钟速学

    非极大抑制 NMS的英文是Non maximum suppression的缩写 简单的说 就是模型给出了多个重叠在一起的候选框 我们只需要保留一个就可以了 其他的重叠的候选框就删掉了 效果可见下图 交并比 IoU的英文全称Interp ov
  • 超详细

    早在去年的十二月份 也就是2020年12月 CentOS 官方发文宣称 CentOS项目的未来是 CentOS Stream 明年我们会将重点从CentOS Linux 转移到CentOS Stream 它紧随当前 RHEL 版本之前 Ce
  • matlab和stata,Stata和Matlab联合处理金融数据

    Stata是统计学专业软件 可以很方便的对数据处理 但几乎只能按照整行整列进行 而且每次只能加载一个矩阵 dta文件 如果要用到多个矩阵数据进行操作或进行复杂的循环控制 就力不从心了 而Matlab工业界广泛使用的数据分析处理工具 对矩阵支

随机推荐

  • 在eclipse中调试时,怎样查看一个变量的值?

    在要查看的变量前先设置断点 然后选中变量 右键选debug as gt Java Application 打开debug 透视图 这时在Variables 窗口中可以看到变量当前的值 如果是局部变量 也可以在局部变量窗口中查看 要知道一个方
  • Redis系列一

    1 1 Nosql 1 1 1 概述 单机mysql时代 90年代 一个基本的网站访问量不会太大 单个数据库足够 更多的使用静态网页html 网站瓶颈 数据量太大 一个机器放不下 数据的索引 一个机器的内存也放不下 访问量太大 读写混合 性
  • 病毒分析系列2

    前言 接上篇 进行病毒分析时 在进行具体的病毒行为分析前 需要或许可疑文件的基本信息 此时可以使用pe工具进行分析和获取 基本静态信息获取 一般需要获取的信息包括但不限于 程序哈希值 导入函数表 导出函数表 是否有壳 程序的位数 字符串 具
  • excel中如何将3'30"格式的分秒转换成以秒为单位的数字?

    在excel中 如记录比赛成绩的格式为3 30 要转换成以秒为单位的数字 如210秒的方式 请问该如何操作 假设你的数据在A列 A1 A100 在B1输入下面的公式 然后向下填充 TEXT 00 SUBSTITUTE LEFT A1 LEN
  • 科普篇

    开发者是开源社区生生不息的源动力 为了汇聚开发者力量 共建开源生态 FISCO BCOS智能合约编译技术专项兴趣小组 Compiling Technology of Smart Contract Special Interest Group
  • 链游

    一 前言 身为一名从事移动互联网App开发多年的从业人员 一直在关注前沿的技术方向 以免被时代的列车遗落 从18年底开始关注DApp技术的发展 COCOS发起的COCOS BCX以区块链为底层技术 专注区块链游戏领域的DApp游戏开发框架自
  • 【半监督学习】4、Dense Teacher

    文章目录 一 背景 二 方法 2 1 框架结构 2 2 伪标签的缺陷 2 3 Dense Peseudo Label 三 效果 3 1 数据和实验设置 3 2 主要的结果对比 3 3 和 SOTA 的对比 论文 Dense Teacher
  • yarn upgrade 更新依赖包时yarn.lock更新但package.json不同步更新版本信息

    背景 独立维护项目的架构与开发工作 在升级依赖包时发现使用yarn upgrade更新依赖包 yarn lock文件更新了 但是package json里依赖包的版本没有更新 解决方案 下载npm check updates yarn up
  • 完美解决Python各种no module named "XX"问题

    在腾讯云上玩Django 但总是遇到no module name django core wsgi 等问题 在django的 error log中也提示是 no module 但是 本地 python3 wsgi py或者 python3
  • 被 GitHub 「临时邮箱」项目拉黑,Firefox Relay 引热议;业内首个开源容器安全平台发布;Deepin 20.4 发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 开源大新闻 SUSE 发布业内首个
  • IE8兼容

    X UA Compatible是针对ie8新加的一个设置 对于ie8之外的浏览器是不识别的 这个区别与 content IE 7 在无论页面是否包含指令 都像是使用了 Windows Internet Explorer 7的标准模式 而co
  • 大话赛宁云

    如今 随着数字时代的飞速发展 安全漏洞存在于网络空间中 对系统造成极大的安全隐患 为网络攻击者的恶意入侵提供了捷径 对此 解决这一困境 要秉承 快速 自动 安全 的解决标准 首先需要高技术手段的支持 实施常态化演练 及时发现安全漏洞 测评危
  • 【计算机视觉

    文章目录 一 检测相关 8篇 1 1 Attending Generalizability in Course of Deep Fake Detection by Exploring Multi task Learning 1 2 Harv
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • MVC控制器(Controller)与策略模式(Strategy)

    MVC控制器 Controller 与策略模式 Strategy 转载时请注明出处和作者联系方式 http blog csdn net absurd 作者联系方式 Li XianJing
  • Hashpump实现哈希长度扩展攻击

    Hashpump实现哈希长度扩展攻击 RCEME 0x01 HASH长度拓展攻击 哈希长度拓展攻击的原理有点过于复杂了 这里直接copy其他大佬的描述了 长度扩展攻击 length extension attack 是指针对某些允许包含额外
  • C#

    System IO Pipelines 很酷的读写数据流方式 文章目录 System IO Pipelines 很酷的读写数据流方式 前言 System IO Pipelines 是啥 有什么优点 有哪些应用场景 网络编程 文件处理 怎么使
  • "防止同时出现多个应用程序实例"之改进

    防止同时出现多个应用程序实例 之改进字号 大 中 小 在 Delphi 5 开发人员指南 中第13章中有一篇 防止同时出现多个应用程序实例 代码中给出了一个MultInst pas单元 工程引用此单元就能防止同时出现多个实例 但实际应用中发
  • Linux中find命令-path -prune用法详解(find命令如何只查找当前目录,而不查找当前目录下的子目录find . ! -name "." -type d -prune -o -type f -name "*.txt" -print)

    在Windows中可以在某些路径中查找文件 也可以设定不在某些路径中查找文件 下面用Linux中的find的命令结合其 path prune参数来看看在Linux中怎么实现此功能 假如在当前目录下查找文件 且当前目录下有很多文件及目录 多层
  • python自动化赚钱-薅羊毛

    1 目 标 场 景 最近 有一个朋友告诉我 她在某平台上购买了一部手机 收到货之后发现商品质量挺好的 价格也不贵 临了随手给了个好评 商家最后还给她发一个 小红包 她把这个商品分享给了我 本篇文章的目的是利用Python 自动化完成商品购买