天猫商城自动化python脚本(仅供初学者学习使用)

news2024/11/15 22:24:21

作者:Eason_LYC
悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。
一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有!
技术领域:WEB安全、网络攻防
关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!
个人社区:极乐世界-技术至上
追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)

背景

写这篇文章的目的仅是为了方便给初学者介绍一下如何上手写一些好玩的脚本,能更快的学以致用。
从前年开始,天猫和京东就推出各类抢购活动,最有代表性的就是53°飞天茅台的抢购,那个抢到后真金白银能赚到钱。只是现在再也不是一个脚本就能搞定的了,已经升级成为服务器加网络的专业团队才能玩的抢购了。
在这里插入图片描述

本文介绍的脚本仅是实现淘宝从购物车自动全选、结算、下单直到付款的自动化脚本工具,是一个非常初级简单的脚本。抢到这个茅台不太可能,但是一般的商品自动化没问题。但是对于初学者能非常好的get到思路,并能直接看到效果。

天猫超市业务逻辑

写任何脚本之前,都要通过正常的访问,明确基本的业务逻辑。本文关注天猫商城的购买流程,那天猫商城购买流程有哪些呢?

Created with Raphaël 2.3.0 1.天猫商城商品加购物车 2.购物车页面物品全选 3.购物车页面点击结算 4.订单确认页信息确认(邮寄地址) 6.支付宝支付页面(付款密码或扫码支付) 确认? 结束 yes

本脚本实现上市步骤2、3、4的自动化操作

此类python脚本基础知识

一定要会的两个python第三方库,分别是第三方库selenium和python内置库requests

python selenium 基本使用方式

Python Selenium 是一种用于自动化测试 Web 应用程序的工具,它使用 Python 编写的脚本来控制 Web 浏览器进行操作。

基本使用方式如下:

  1. 安装 Selenium:可以通过 pip 安装,在终端输入命令 “pip install selenium” 即可。

  2. 下载 WebDriver:Selenium 需要与浏览器配合使用,所以你需要下载与使用的浏览器相对应的 WebDriver。

  3. 导入 Selenium:在 Python 代码中导入 selenium 库。

  4. 创建 WebDriver 对象:使用以下代码创建 WebDriver 对象:

from selenium import webdriver

driver = webdriver.Firefox()
  1. 操作浏览器:使用 WebDriver 的方法操作浏览器,如打开网页、填写表单、点击按钮等。
# 举例
driver.get("https://www.google.com")

search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium")
search_box.submit()
  1. 关闭浏览器:使用以下代码关闭浏览器:
driver.quit()

官方文档

python3 内置库requests

Python3 内置的 requests 库是一个非常流行的 HTTP 客户端库,提供了简洁易用的 API,帮助你快速发送 HTTP 请求。

  1. 发送 GET 请求:
import requests

url = 'https://www.example.com/api/get_data'
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    # do something with data
else:
    print('Failed to fetch data')
  1. 发送带有参数的 GET 请求:
import requests

url = 'https://www.example.com/api/search'
params = {'query': 'python', 'page': 1}
response = requests.get(url, params=params)

if response.status_code == 200:
    data = response.json()
    # do something with data
else:
    print('Failed to search data')
  1. 发送 POST 请求
import requests

url = 'https://www.example.com/api/create_user'
data = {'username': 'example_user', 'email': 'example_user@example.com'}
response = requests.post(url, data=data)

if response.status_code == 201:
    result = response.json()
    # do something with result
else:
    print('Failed to create user')

这些仅仅是 requests 库的基本用法,它还有许多其他功能,例如发送带有请求头、cookie、文件等的请求,更多用法请参考官方文档:http://docs.python-requests.org/en/latest/

使用Selenium实现自动化抢购茅台

完整脚本如下:

import datetime
from time import sleep
from selenium import webdriver

flag = False
# 秒杀时间  浏览器时间
times = '2023-02-12 20:00:00'
print("*"*48)
print("【重要】此脚本仅用于演示学习使用,不得用于任何实际环境或支付环节!!!")
print("【重要】程序会自动在目标时间,打开购物车点击结算,最终至付款界面,需手动完成付款!!!")
print("【tips】请提前设置默认邮寄地址,准备好手机扫码登陆。建议提前40s运行程序。")
print("目标时间:",times)
print("*"*48)
browser = webdriver.Chrome()
browser.get('https://login.taobao.com/')
sleep(2)
browser.find_element_by_xpath("/html/body/div/div[2]/div[3]/div/div/div/div[1]/i").click()
print(f"请在10s内完成扫码登陆")
sleep(16)
browser.get("https://cart.taobao.com/cart.htm?spm=a21bo.jianhua.1997525049.1.5af911d9v3sXxZ&from=mini&pm_id=1501036000a02c5c3739")
sleep(4)
# 购物车全选
while 1==1:
    if browser.find_element_by_id("J_SelectAll1"):
        browser.find_element_by_id("J_SelectAll1").click()
        break

print("waiting for time...")
while True:
    # 获取电脑现在的时间
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
    # 对比时间,时间到的话就点击立即购买

    if now >= times:
        print(now)
        try:
            if browser.find_element_by_link_text("结 算"):
                browser.find_element_by_link_text("结 算").click()
                print("1.已成功点击结算")
                flag = True
                break
        except:
            pass

if flag==True:
    count = 0
    while True:
        try:
            if browser.find_element_by_link_text("提交订单"):
                browser.find_element_by_link_text("提交订单").click()
                print("1.已成功点击结算")
                flag = True
                print("2.已下单成功,进入付款界面,请尽快手动完成付款")
                done_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
                print("下单时间:", done_time)
                break
        except:
            count +=1
            print("未成功进入付款界面,再次尝试! 已尝试",count)
            if count == 600:
                break
            pass

tips: 脚本使用前请先设置脚本运行时间,就是times = 设置的时间(不得早于实际时间,否则脚本运行无效)
这是一个抢购脚本,它使用了 Selenium 模拟用户操作,抢购商品。

  • datetime 模块是 python 自带的时间模块,用于获取当前时间,对比目标时间。

  • sleep 函数来自 time 模块,可以暂停代码执行一段时间,用于让程序等待模拟人类操作的时间。

  • webdriver 是 Selenium 的核心模块,提供了操作浏览器的 API,包括打开浏览器,点击,查找元素等等。

  • browser.get 函数用于打开一个 URL。

  • browser.find_element_by_xpath 用于在页面中查找元素,通过元素的 xpath 定位。

  • browser.find_element_by_id 用于在页面中查找元素,通过元素的 id 定位。

  • browser.find_element_by_link_text 用于在页面中查找元素,通过元素的文字内容定位。

  • browser.click 用于模拟鼠标点击元素。

  • 此脚本中,还有多个 while 循环,用于检查元素是否存在,如果不存在,则继续循环。

  • 此脚本仅用于学习和演示目的,不得用于任何实际环境或支付环节!

以下是代码的详细解释

使用 python3 和 selenium 库编写的爬虫脚本,主要目的是实现抢购商品的自动化操作。

代码的主要流程如下:

导入所需的库:
import datetime:用于处理时间的库。
from time import sleep:sleep函数用于延时,方便登陆等操作。
from selenium import webdriver:selenium库是一个自动化测试框架,此代码中使用到了它的 webdriver 模块。
设置变量和程序提示信息:
flag 变量用于标识抢购是否成功。
times 变量是秒杀的时间,此处是一个字符串,格式为“YYYY-MM-DD HH:MM:SS”。
程序提示信息:通过 print() 函数,在控制台输出一些程序的使用说明和目标时间,以方便使用者了解程序的作用。
浏览器的自动化操作:
browser = webdriver.Chrome():打开 Chrome 浏览器。
browser.get('https://login.taobao.com/'):打开淘宝登陆页面。
sleep(2):等待2秒,方便用户完成登陆操作。
browser.find_element_by_xpath("/html/body/div/div[2]/div[3]/div/div/div/div[1]/i").click():通过 xpath 定位元素并点击,完成扫码登陆操作。
sleep(16):等待16秒,以等待登陆成

以上仅是用一种方式写了一个非常简单的脚本,大家可以按差不多的思路使用requests库,改写这个脚本哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)

行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 目录 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 1. 前言 2. 人体检测数据集说明 3. 基于YOLOv5的人体检测模型训练 4.人体检测模型…

开源工具系列4:Nuclei

前言 Nuclei 用于基于模板跨目标发送请求,从而实现零误报并提供对大量主机的快速扫描。Nuclei 提供对各种协议的扫描,包括 TCP、DNS、HTTP、SSL、File、Whois、Websocket、Headless 等。凭借强大而灵活的模板,Nuclei 可用于对各种安全检查进…

ArcGIS中ArcMap创建渔网Create Fishnet:生成指定大小的格网矢量文件

本文介绍在ArcMap软件中,通过“Create Fishnet”工具创建渔网,从而获得指定大小的矢量格网数据的方法。 首先,我们在创建渔网前,需要指定渔网覆盖的范围。这里我们就以四川省为例,在这一范围内创建渔网;其中…

2.13作业【设备树解析,按自己理解】

设备树定义 设备树(device tree是描述硬件信息的一种树形结构,设备书文件在linux内核启动后被内核解析。描述一个硬件设备信息的节点我们叫做设备节点,一个设备节点内部包含当前硬件的多个不同属性,相同节点不同属性是以链式结构存…

[Datawhale][CS224W]图神经网络(一)

目录一、导读1.1 当前图神经网络的难点1.2 图神经网络应用场景及对应的相关模型:1.3 图神经网络的应用方向及应用场景二、图机器学习、图神经网络编程工具参考文献一、导读 ​ 传统深度学习技术,如循环神经网络和卷积神经网络已经在图像等欧式数据和信号…

RoI Transformer论文翻译详解

Learning RoI Transformer for Oriented Object Detection in Aerial Images 0.摘要 航空图像中的目标检测是计算机视觉中一个活跃而又具有挑战性的任务,因为它具有鸟瞰视角、高度复杂的背景和变化的物体外观。特别是在航空图像中检测密集的目标时,基于…

01-RTOS

对于裸机而言,对于RTOS而言即:对于裸机,打游戏意味着不能回消息 回消息意味着不能打游戏对于RTOS 打游戏和裸机的切换只需要一个时间片节拍 1ms 从宏观来看 就是同时进行的两件事(但要在这两件事情的优先级一样的情况下&#xff0…

HTML面试题

HTML面试题部分知识点梳理 1.如何理解HTML语义化 让页面的内容结构化,便于对浏览器、引擎解析,易于阅读,便于维护理解,利于SEO。 2.H5的新特性 video/audio视频/音频canvas 绘画geolocation 定位 用于定位用户的位置WebSocket…

浅谈业务中台前端设计

做前端中台业务一年多的时间,有一些心得体会,和大家分享分享。 中台是什么中台业务的价值是什么做了哪些前端中台业务如何设计前端中台业务未来展望 中台是什么 百度百科的解释比较言简意赅:“中台,互联网术语,一般…

[数据库]表的约束

●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…

【MySQL】MySQL 中 WITH 子句详解:从基础到实战示例

文章目录一、什么是 WITH 子句1. 定义2.用途二、WITH 子句的语法和用法1.语法2.使用示例3.优点三、总结"梦想不会碎,只有被放弃了才会破灭。" "Dreams wont break, only abandoned will shatter."一、什么是 WITH 子句 1. 定义 WITH 子句是 M…

LeetCode——1234. 替换子串得到平衡字符串

一、题目 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符串 s,请通过「替换一个子串」的方式&a…

Kubeadm搭建K8S

目录 一、部署步骤 1、实验环境 2、环境准备 3、所有节点安装Docker 4、 所有节点配置K8S源 5、所有节点安装kubeadm,kubelet和kubectl 6、部署 kubernetes Master 节点 7、token制作 8、k8s-node节点加入master节点 9、 master节点安装部署pod网络插件&a…

ChatGPT被玩疯,问“如果美国倒了,世界会怎样?”回答太吓人了

“ChatGPT”大火不见消停…… 最近这些天,想必大家的社交平台都刷爆了“ChatGPT”这个词吧? 作为OpenAI 的语言模型工具,它可以生成文本、回答问题、对话、摘要、翻译等。 特点是语言表达流畅,思维敏捷,可以回答复杂…

golang语言本身设计点总结

本文参考 1.golang的内存管理分配 golang的内存分配仿造Google公司的内存分配方法TCmalloc算法;她会把将内存请求分为两类,大对象请求和小对象请求,大对象为>32K的对象。 在了解golang的内存分配之前要知道什么事虚拟内存,虚拟内存是把磁盘作为全局…

设计模式之工厂模式详解和应用

目录1 工厂模式的历史由来2.简单工厂模式2.1 简单工厂模式定义2.2 简单工厂模式案例2.3 简单工厂模式相关源码2.4 简单工厂模式优缺点3 工厂方法模式3.1 工厂方法模式定义3.2 工厂方法模式案例3.3 工厂方法模式源码3.4 工厂方法模式优缺点4 抽象工厂模式4.1 抽象工厂模式定义4.…

【项目】基于SpringBoot+Freemarker+Mybatis+MySQL+LayUI实现CRM智能办公系统

这里写目录标题CRM基本概念CRM分类模块功能描述项目代码application-dev.yml部分页面代码CRM基本概念 圈内存在这么一句话:“世上本来没有 CRM,大家的生意越来越难做了,才有了 CRM。” 在同质化竞争时代,顾客资产尤为重要&#x…

CUDA流入门|参加CUDA线上训练营

CUDA 流的概念 CUDA流在加速应用程序方面起到重要的作用,他表示一个GPU的操作队列操作在队列中按照一定的顺序执行,也可以向流中添加一定的操作如核函数的启动、内存的复制、事件的启动和结束等,添加的顺序也就是执行的顺序一个流中的不同操…

SQLi-LABS-Challenges 0~28a解析

Less-1 GET-Error based - Single quotes - String 成功payload 1 union select 1,database(),user()%23 1 and 12 union select user(),1,database()-- 经测试 输出时会输出 3 列,所以此处 union select 需 select 三个数据 * 1‘ order by 4--时会报错&#…

OpenHarmony使用Socket实现一个TCP服务端详解

点击获取BearPi-HM_Nano源码 ,以D4_iot_tcp_server为例: 点击查看:上一篇关于socket udp实现的解析 查看 TCPServerTask 方法实现: static void TCPServerTask(void) {//连接WifiWifiConnect("TP-LINK_65A8",