作者: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 webdriver
driver = 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 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')
- 发送带有参数的 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')
- 发送 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库,改写这个脚本哦~