點擊上方“後端開發技術”,選擇“設爲星標”
優質文章和資源,及時送達
自動下單腳本
閒來無事,寫了一個定時搶購下單的腳本,可用於淘寶和天貓商品的定時秒殺,但是最終付款操作需要手動完成。
長話短說直接介紹腳本的運行步驟。
安裝python3
請自行安裝python 3,如果已安裝版本是python 2,推薦使用版本管理工具。python3:https://www.python.org/downloads/
安裝所需依賴
pip install selenium
pip install pillow
如果還有其他缺失 請根據提示 pip install 安裝
需要有chrome瀏覽器和chromedriver,下載鏈接在文章末尾
3.設置搶購頁面url
4.設置天貓還是淘寶
這裏推薦使用默認購物車模式3,代碼中的url也不需要修改,通過購物車下單更快。
5.設置開搶時間
6.運行程序
7.掃碼登錄
8.選中要購買商品以及相應種類等(必須選中!!!)
9.等待自動下單
代碼如下,複製到本地文件格式爲xxx.py,配置運行即可:
# python3.6.5
# coding:utf-8
# 天貓淘寶自動下單 用於定時搶購
import os
from selenium import webdriver
import requests
import time
from selenium.webdriver.chrome.options import Options
# 創建瀏覽器對象
chrome_options = Options()
# 關閉使用 ChromeDriver 打開瀏覽器時上部提示語 "Chrome正在受到自動軟件的控制"
chrome_options.add_argument("disable-infobars")
# 允許瀏覽器重定向,Framebusting requires same-origin or a user gesture
# chrome_options.add_argument('--headless')
driver = webdriver.Chrome(os.path.join(os.path.dirname(__file__), "chromedriver.exe"),
chrome_options=chrome_options)
# 窗口最大化顯示
driver.maximize_window()
def login(url, mall):
'''
登陸函數
url:商品的鏈接
mall:商城類別
'''
driver.get(url)
driver.implicitly_wait(10)
time.sleep(2)
# 淘寶和天貓的登陸鏈接文字不同
if mall == '1':
# 找到並點擊淘寶的登陸按鈕
driver.find_element_by_link_text("親,請登錄").click()
elif mall == '2':
# 找到並點擊天貓的登陸按鈕
driver.find_element_by_link_text("請登錄").click()
print("請在30秒內完成登錄")
# time.sleep(10)
# driver.get_screenshot_as_file("login.png")
# img = Image.open('login.png')
# 顯示圖片
# img.show()
# 用戶掃碼登陸
time.sleep(30)
def buy(buy_time, mall, time_dif):
'''
購買函數
buy_time:購買時間
mall:商城類別
'''
print("開始購買")
if mall == '1':
# "立即購買"的css_selector
btn_buy = '#J_juValid > div.tb-btn-buy > a'
# "立即下單"的css_selector
btn_order = '#submitOrder_1 > div.wrapper > a'
elif mall == '3':
btn_buy = '#J_Go'
btn_order = '#submitOrderPC_1 > div > a'
else:
btn_buy = '#J_LinkBuy'
btn_order = '#submitOrderPC_1 > div > a'
timeArray = time.strptime(buy_time, "%Y-%m-%d %H:%M:%S")
# 轉爲時間戳
timeStamp = int(time.mktime(timeArray))
print("開始準備購買")
# checkbox = driver.find_element_by_css_selector("#J_Item_1116006369759 > ul > li > div > div > div")
# checkbox.click()
selector = driver.find_element_by_css_selector(btn_buy)
while True:
# 現在時間大於預設時間則開售搶購
tmp_time = time.time()
if tmp_time >= (timeStamp - time_dif):
try:
print("開始購買" + str(time.time()))
# 找到“立即購買”,點擊
if selector:
print("點擊" + str(time.time()))
selector.click()
break
except:
pass
while True:
try:
# 找到“立即下單”,點擊,
# print("嘗試提交訂單")
order_selector = driver.find_elements_by_css_selector(btn_order)
if order_selector:
print("購買" + str(time.time()))
order_selector[-1].click()
# 下單成功,跳轉至支付頁面
print("購買成功" + str(time.time() - tmp_time))
break
driver.refresh()
except:
driver.refresh()
time.sleep(0.01)
def get_server_time():
time_start = time.time()
r1 = requests.get(url='http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp',
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'})
x = eval(r1.text)
tmp = time.time() - time_start
timeNum = int(x['data']['t'])
timeStamp = float(timeNum / 1000)
print(tmp)
# timeArray = time.localtime(timeStamp)
# otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
return timeStamp, tmp
# driver.quit()
啓動方法:
# 使用方法
# 1 設置url
# 2 設置天貓還是淘寶
# 3 設置開搶時間
# 4 運行程序
# 5 掃碼登錄
# 6 選中要購買商品以及相應種類等(必須選中!!!)
# 7 自動下單
#
if __name__ == "__main__":
# 輸入要購買物品 url
# 如果是天貓超市的搶購 請先加入購物車 此處爲購物車鏈接
url = "https://cart.taobao.com/cart.htm"
# 請選擇商城(淘寶 1 天貓 2 3 通過購物車 輸入數字:
mall = '3'
# 輸入開售時間
bt = "2020-03-01 15:00:00"
server_time, tmp = get_server_time()
time_dif = time.time() - server_time + tmp + tmp
login(url, mall)
buy(bt, mall, 2 * time_dif + 0.5)
下載chromedriver
鏈接:
https://pan.baidu.com/s/1EfWys6NzDne3YFNCzBzIAQ 密碼:31mo
最終效果與網速等條件有直接關係,沒接口快但比手工強太多,只是一種思路,不喜勿噴。
希望一切順利。
◆ ◆ ◆ ◆ ◆
關注並後臺回覆 “面試” 或者 “視頻”,
即可免費獲取最新2019BATJava
大廠面試題和大數據微服務視頻
您的分享和支持是我更新的動力