天猫商城自动化python脚本(仅供初学者学习使用)
作者:Eason_LYC
悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。
一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有!
技术领域:WEB安全、网络攻防
关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!
个人社区:极乐世界-技术至上
追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)
背景
写这篇文章的目的仅是为了方便给初学者介绍一下如何上手写一些好玩的脚本,能更快的学以致用。
从前年开始,天猫和京东就推出各类抢购活动,最有代表性的就是53°飞天茅台的抢购,那个抢到后真金白银能赚到钱。只是现在再也不是一个脚本就能搞定的了,已经升级成为服务器加网络的专业团队才能玩的抢购了。
本文介绍的脚本仅是实现淘宝从购物车自动全选、结算、下单直到付款的自动化脚本工具,是一个非常初级简单的脚本。抢到这个茅台不太可能,但是一般的商品自动化没问题。但是对于初学者能非常好的get到思路,并能直接看到效果。
天猫超市业务逻辑
写任何脚本之前,都要通过正常的访问,明确基本的业务逻辑。本文关注天猫商城的购买流程,那天猫商城购买流程有哪些呢?
本脚本实现上市步骤2、3、4的自动化操作
此类python脚本基础知识
一定要会的两个python第三方库,分别是第三方库selenium
和python内置库requests
python selenium 基本使用方式
Python Selenium 是一种用于自动化测试 Web 应用程序的工具,它使用 Python 编写的脚本来控制 Web 浏览器进行操作。
基本使用方式如下:
安装 Selenium:可以通过 pip 安装,在终端输入命令 “pip install selenium” 即可。
下载 WebDriver:Selenium 需要与浏览器配合使用,所以你需要下载与使用的浏览器相对应的 WebDriver。
导入 Selenium:在 Python 代码中导入 selenium 库。
创建 WebDriver 对象:使用以下代码创建 WebDriver 对象:
from selenium import webdriverdriver = webdriver.Firefox()
- 操作浏览器:使用 WebDriver 的方法操作浏览器,如打开网页、填写表单、点击按钮等。
# 举例
driver.get("https://www.google.com")search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium")
search_box.submit()
- 关闭浏览器:使用以下代码关闭浏览器:
driver.quit()
官方文档
python3 内置库requests
Python3 内置的 requests 库是一个非常流行的 HTTP 客户端库,提供了简洁易用的 API,帮助你快速发送 HTTP 请求。
- 发送 GET 请求:
import requestsurl = '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')
- 发送带有参数的 GET 请求:
import requestsurl = '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')
- 发送 POST 请求
import requestsurl = '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 webdriverflag = 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()breakprint("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 = Truebreakexcept:passif flag==True:count = 0while True:try:if browser.find_element_by_link_text("提交订单"):browser.find_element_by_link_text("提交订单").click()print("1.已成功点击结算")flag = Trueprint("2.已下单成功,进入付款界面,请尽快手动完成付款")done_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')print("下单时间:", done_time)breakexcept:count +=1print("未成功进入付款界面,再次尝试! 已尝试",count)if count == 600:breakpass
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库,改写这个脚本哦~
天猫商城自动化python脚本(仅供初学者学习使用)相关推荐
- C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流
C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...
- 淘宝抢购python代码-仅供学习
淘宝抢购python代码-仅供学习 需要使用的python工具包有 from selenium import webdriver import datetime import time from se ...
- 电影网站 php asp,moviewebsite 这是一个电影网站的源码,基于asp技术实现.仅供交流学习 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
文件名称: moviewebsite下载 收藏√ [ 5 4 3 2 1 ] 开发工具: ASP 文件大小: 7432 KB 上传时间: 2013-07-11 下载次数: 0 提 供 者: ...
- 计算机网络面试题(转载,仅供自己学习)
计算机网络面试题(转载,仅供自己学习) 转载自 超神冉 随着近几年关于复杂网络(Complex network)理论及其应用研究的不断深入,已有大量关于复杂网络的文章发表在Science,ature, ...
- 开源一个完整的iOSApp《丁丁美图》供初学者学习
学习iOS开发的时候,得益于开源社区的大量开源项目,去年开始购买了个人开发者账号,写了这个练手项目<丁丁美图>,并上传到了App Store(Ipad版本被驳回也懒得处理).现在将代码开源 ...
- 大数据福利篇:大数据集成环境虚拟机的下载与使用(仅供个人学习使用)
内容简介 一.集成环境虚拟机简介 二.集成环境虚拟机包含大数据框架清单 三.集成环境虚拟机下载 四.集成环境虚拟机安装与配置步骤 五.总结 一.集成环境虚拟机简介 前段时间有个小伙伴和我说在学习大数据 ...
- 托软件,本软件仅供研究学习代码交流
[软件仅供休闲娱乐,请勿用于商业及非法用途,本软件仅供研究学习代码交流,发现一款很不错的托自动上下分软件,支持所有的功能等多项功能,实在是居家旅行必备神器] 本Markdown编辑器使用StackEd ...
- csgo开箱小程序(python,仅供娱乐)
csgo开箱小程序(仅供娱乐) import random import time while True:m=0t=0y=0lan=0zi=0fen=0hong=0jin=0for n in rang ...
- Web安全攻防 信息收集篇(仅供交流学习使用,请勿用于非法用途)
Web安全攻防 准备篇 1. 信息收集 域名介绍: 域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名 称,用于在数据传 输时标识计算机的电子方位 ...
最新文章
- 无监督方法实现C++、Java、Python 代码转换,程序员:出了bug怎么办,两种语言都要看吗?...
- Java实现选最远距离的座位_LeetCode算法题-Maximize Distance to Closest Person(Java实现)...
- oracle经典书籍推荐
- linux防火墙 限制端口,Linux开启防火墙并限制开放端口
- arcgis超级工具安装教程_【软件安装管家】Autodesk卸载官方工具安装教程
- [html] 使用canvas制作一个印章
- java quartz 数据库_SpringBoot+Quartz+数据库存储
- Linux 软件包管理常用命令 -- yum
- Java集合——题目
- Linux实战教学笔记01:计算机硬件组成与基本原理
- 神经网络评价模型,神经网络评价指标
- 【案例】Python金融分析-CAPM模型对股票进行分析
- 提取win10 锁屏壁纸
- 小程序商城制作一个需要多少钱
- RRStudio(一)
- 计量经济学(stata)笔记1 记录每天的进步
- 1449:【例题2】魔板
- 苹果商标计算机辅助设计,苹果 Apple MacBook Pro 15英寸 2019 详细评测报告
- CF Round231C (ZWJ 神构造)
- 微信小程序开发之文件上传下载应用场景(附Demo源码)