京東搶購失敗?試試用 python 準時自動搶購 (註釋詳盡)
import cv2
import time
import random
import datetime
import numpy as np
from urllib import request
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
# 移動滑動驗證碼中的滑塊
def checkMove(button_slide, distance):
dist_finished = 0 # 已經移動的距離
dist_remaining = distance # 剩餘的距離
dist_move = 5 # 每次移動的距離
element = driver.find_element_by_xpath(button_slide) # 選取滑動驗證碼滑塊
ActionChains(driver).click_and_hold(element).perform() # 模擬滑鼠在滑塊上點選並保持
# 模擬不斷加速移動滑塊
while dist_remaining > 0:
dist_move += dist_move # 不斷 加速移動滑塊
# 每次移動滑塊都帶有正負偏差來模擬手動移動時的滑動不穩定
ActionChains(driver).move_by_offset(dist_move, random.randint(-3, 3)).perform() # 模擬滑鼠水平向右拖動滑塊
dist_remaining -= dist_move # 剩餘距離減去已移動的距離
dist_finished += dist_move # 已完成距離加上已移動的距離
ActionChains(driver).move_by_offset(dist_remaining, random.randint(-3, 3)).perform() # 模擬滑鼠水平回移拖動滑塊修正
ActionChains(driver).release( # 模擬鬆開滑鼠
# 獲取滑動驗證碼構成的兩張圖片並計算應移動的距離
def getCheckImage():
image_big_path = r'//div/div[@class="JDJRV-bigimg"]/img' # 滑動驗證碼大圖(大背景)
image_small_path = r'//div/div[@class="JDJRV-smallimg"]/img' # 滑動驗證碼小圖(小滑塊)
button_slide = '//div[@class="JDJRV-slide-inner JDJRV-slide-btn"]' # 滑動驗證碼滑塊按鈕
image_big = driver.find_element_by_xpath(image_big_path).get_attribute("src") # 驗證碼背景圖的完整路徑
image_small = driver.find_element_by_xpath(image_small_path).get_attribute("src") # 驗證碼滑塊圖的完整路徑
request.urlretrieve(image_big, 'background.jpg') # 下載驗證碼背景圖到本地
request.urlretrieve(image_small, 'slideblock.jpg') # 下載驗證碼滑塊圖到本地
cv2.imwrite('background.jpg', cv2.imread('background.jpg', 0)) # 將驗證碼背景圖讀取為灰度圖並覆蓋原圖
slideblock = cv2.imread('slideblock.jpg', 0) # 將驗證碼滑塊圖讀取為灰度圖
slideblock = abs(255 - slideblock) # 對驗證碼滑塊圖反灰化處理
cv2.imwrite('slideblock.jpg', slideblock) # 儲存處理後的驗證碼滑塊圖
background = cv2.imread('background.jpg') # 讀取驗證碼背景圖(灰度)
slideblock = cv2.imread('slideblock.jpg') # 讀取驗證碼滑塊圖(灰度)
result = cv2.matchTemplate(background, slideblock, cv2.TM_CCOEFF_NORMED) # 模板匹配,獲得滑塊在背景上的相似度矩陣
_, distance = np.unravel_index(result.argmax(), result.shape) # 獲得要移動的距離
return button_slide, distance
# 滑動驗證
def slideIdentify():
slideButton, distance = getCheckImage() # 獲取滑塊和滑塊需要移動的距離
print(f' 本次滑塊需要移動的距離為: {distance}') # 列印滑塊需要移動的距離
checkMove(slideButton, distance / 1.3) # 移動滑塊, 1.3 是一個實驗修正值
# 登入京東網頁版
def login(username, password):
driver.get(') # 京東登入介面連結
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_link_text(" 賬戶登入 ").click() # 找到賬戶登入並點選
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_id("loginname").send_keys(username) # 找到使用者名稱輸入框並輸入使用者名稱
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_id("nloginpwd").send_keys(password) # 找到密碼輸入框輸入密碼
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_id("loginsubmit").click() # 找到登入並點選
while True:
try:
slideIdentify() # 進行滑動驗證
time.sleep(2) # 等待 3 秒
except:
print(" 登入成功 ")
break
# 定時購買東西
def buy(buy_time):
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_link_text(" 我的購物車 ").click() # 找到我的購物車並點選
total_windows =跟單網gendan5.com driver.window_handles # 所有開啟的視窗
driver.switch_to.window(total_windows[1]) # 控制程式碼遷移到第二個視窗
while True:
current_time = datetime.datetime.now() # 獲取當前日期時間
if current_time.strftime('%Y-%m-%d %H:%M:%S') == buy_time: # 如果當前時間等於指定購買時間
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_name('select-all').click() # 購物車全選
time.sleep(0.5) # 等待 0.5 秒
driver.find_element_by_link_text(" 去結算 ").click() # 找到去結算並點選
driver.implicitly_wait(2) # 隱式等待 2 秒
driver.find_element_by_id("order-submit").click() # 找到提交訂單並點選
driver.implicitly_wait(2) # 隱式等待 2 秒
print('current time : ' + current_time.strftime('%Y-%m-%d %H:%M:%S')) # 列印當前時間
print(' 購買成功 !') # 購買成功
if __name__ == '__main__':
driver = webdriver.Edge(executable_path='./msedgedriver.exe') # 開啟 Edge 瀏覽器
driver.maximize_window() # 最大化 Edge 瀏覽器視窗
login(' 你的使用者名稱 ', ' 你的密碼 ') # 登入京東
buy('2021-08-14 12:00:00') # 定時購買
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2931188/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Python秒殺指令碼】淘寶或京東等秒殺搶購Python指令碼
- 搶購 庫存扣減
- Python版中秋佳節月餅搶購指令碼Python指令碼
- 利用 JS 指令碼實現網頁全自動秒殺搶購JS指令碼網頁
- 搶先看!美團、京東、360等大廠面試題解析,技術面試必備。面試題
- 網上搶購茅臺催生黃牛黨:必須嚴打各類搶購軟體
- 商品搶購倒數計時效果程式碼例項
- Laravel 高併發搶購模擬Laravel
- 實錘!購自京東的茅臺確屬假貨 京東:被掉包
- Cypress系列(65)- 測試執行失敗自動重試
- MQ消費失敗,自動重試思路MQ
- 天貓雙11“搶先購”開搶 數億“尾款人”下單
- TestNg 失敗用例重試自動被 ignored 怎麼辦?
- python使用requests秒殺茅臺(適用某寶,也可搶購其他商品)Python
- python實現自動搶課指令碼Python指令碼
- python+selenium實現自動搶票Python
- 自動化測試專案為何失敗
- 支付寶隨心乘禮包在哪搶?12306隨心乘的搶購方法
- Python教你全自動搶微信紅包Python
- 2019春運火車票搶票攻略,候補購票撿漏搶票技巧
- 自動化測試實戰技巧:「用例失敗重試機制」實現方案分享
- 搶灘北美:2022假日購物季營銷洞察
- 618知識蓄能大作戰,超值搶購篇
- 讓我們來用php編寫一個搶購商品指令碼PHP指令碼
- 倒數計時4天UnityVisionVR/ARSummitAsia20165折門票搶購中UnityVRMIT
- 劉強東向快遞公司開戰:京東物流全面搶生意NE
- 為什麼世界各地的人搶購衛生紙?
- 瑞星推出防毒新品預掀31.5元搶購熱潮防毒
- 當「搶購 PS5」成為一場遊戲遊戲
- 主題訂閱推送助力雙十一預約搶購
- 高通收購恩智浦,失敗!
- 搶購倒數計時自定義控制元件的實現與優化控制元件優化
- 京東購物小程式cookie方案實踐Cookie
- 點選失敗?Python+Selenium自動化測試的終極解決方案揭秘!Python
- Redis 實現高併發下的搶購 / 秒殺功能Redis
- Python3.6實現12306火車票自動搶票Python
- 搶購倒數計時自定義控制元件的實現與最佳化控制元件
- 使用Python請求http/https時設定失敗重試次數PythonHTTP