> 文档中心 > iphone13到底香不香,真的这么难抢?

iphone13到底香不香,真的这么难抢?


先水俩图

iphone12/13抢购自动化测试脚本

iphone13到底香不香,真的这么难抢?
iphone13到底香不香,真的这么难抢?

说在前面

本文核心内容

  1. iphone13 有货通知 NodeJs脚本
  2. iphone13 抢购的python+selenium自动化测试脚本
  3. iphone12 预约抢购的python+selenium自动化测试脚本

起因

首先说明本菜狗不是什么专业评测,起因只是因为刷新闻时,看到铺天盖地的新闻:13有多香,高刷有多好,供货多紧张,根本抢不到等。作为一个好奇心重的菜狗,就只是想单纯的看看这确有其事还是故弄玄虚的噱头!
在这里插入图片描述

走起

  1. 登录苹果官网,映入眼帘的大苹果

看起来是挺不错,但是价格也很感人

在这里插入图片描述2.去看看有没有货,现货怎么取,快递啥时候到

看似确实货源紧张,都快排到圣诞节了,而且现货也没有,只能在线购买,可能网上说的是真的?

在这里插入图片描述
在这里插入图片描述
3.一探究竟

选了一下我要取货,怎么刷都刷不出来,表面看起来确实是没货啊!

在这里插入图片描述

实操代码

为了解决这个抢不到或者无法及时得到有货通知的问题,采用以下解决方法!

1.iphone13 有货通知 NodeJs脚本

当有货时发送邮件通知,通过手速进行抢购

js代码
/* * @Author: JavaDog * @Date: 2021-09-19 21:22:49 * @LastEditTime: 2021-10-12 14:55:49 * @Description: iphone13 pro 银色 256g/512g * @FilePath: apple13.js */var https = require("https");var http = require("http");var querystring = require("querystring");var request = require("request");// 是否有货地址,可以替换成你的自己想要的型号let url = [  "https://www.apple.com.cn/shop/fulfillment-messages?pl=true&mt=compact&parts.0=MLTG3CH/A&searchNearby=true&store=R557",  "https://www.apple.com.cn/shop/fulfillment-messages?pl=true&mt=compact&parts.0=MLTC3CH/A&searchNearby=true&store=R557",];// 循环定时器setInterval(() => {  url.forEach((item) => {    https.get(item, function (response) {      var body = [];      response.on("data", function (chunk) { body.push(chunk);      });      response.on("end", function () { body = Buffer.concat(body); let json = JSON.parse(body.toString()); let content = json.body.content; let pickupMessage = content.pickupMessage; let store = pickupMessage.stores[0]; let partsAvailability = store.partsAvailability; let obj =   partsAvailability["MLTG3CH/A"] ||   partsAvailability["MLTC3CH/A"] ||   partsAvailability["MLTJ3CH/A"] ||   partsAvailability["MLTE3CH/A"]; let pickupDisplay = obj.pickupDisplay; let storePickupProductTitle = obj.storePickupProductTitle; let pickupSearchQuote = obj.pickupSearchQuote; // 重要参数拼接 let result =   storePickupProductTitle +   " " +   pickupDisplay +   " " +   pickupSearchQuote +   " " +   new Date(); if (pickupDisplay != "unavailable" || pickupDisplay == "available") {   // 有货   console.log(result);   // 此处注意,请改成自己的邮件发送服务器,或者其他通知平台,本人的是自己的阿里云邮箱   mail(result, storePickupProductTitle); } else {   // 无货   console.log(result); }      });    });  });}, 1000);// 有货邮件提醒function mail(noSimilarModelsText, storePickupProductTitle) {  var options = {    headers: {      "Content-Type": "application/json",      "admin-authorization": "dfaf86e4e45f4906a6ef8d180efba1c0",    },    url: "https://blog.javadog.net/api/admin/mails/test",    method: "POST",    json: true,    body: {      to: "862422627@qq.com",      subject: storePickupProductTitle,      content: noSimilarModelsText,    },  };  function callback(error, response, data) {    console.log("----info------", data);  }  request(options, callback);}
启动

node apple.js

启动时,使用命令 node apple.js 即可,前置条件需要已安装node,如未安装,请参考 Node.js 安装配置,启动后详见下图。如需放置服务器启动,请参考pm2应用进程管理器。

在这里插入图片描述

结论

经过放置服务器24小时不间断的测试得出:每天还是有少量的现货,但只在早上9-12点之间,每天现货量大约在1-5个左右(青岛地区测试),秒杀时间基本在半分钟之内,否则立刻无货
在这里插入图片描述
iphone13到底香不香,真的这么难抢?

2.iphone12 抢购python+selenium自动化测试脚本【只针对谷歌浏览器】

通过python+selenium自动化,让代码帮我们处理。
此处用iphone 12作为流程演示,因为12基本无需抢购,流程可以跑通
😂本菜狗之前没有接触过python,写的垃圾请大佬勿喷!

前置条件

了解python+selenium,可可以参考 Python+Selenium基础入门及实践

注意

如果没有chromedriver.exe 请按照谷歌浏览器版本匹配规则进行选择!本人谷歌版本94.0.4606.81 32位点击下载本人所用的 chromedriver.exe
在这里插入图片描述
切记chromedriver.exe依赖如果不是32位的话可能会报如下错误

WebDriverException:Message:unknown error:cannot find Chrome binary

在这里插入图片描述

python代码
from selenium import webdriverfrom datetime import datetimefrom selenium.webdriver.support.select import Selectimport time# iphone12 自动化测试print("iphone12 自动化测试开始")# 访问测试的url定义url = "https://www.apple.com.cn/shop/buy-iphone/iphone-12"# 1. 创建浏览器对象  这里的Chrome中的变量是chromedriver的驱动地址driver = webdriver.Chrome()# 2. 跳转到apple官网driver.get(url)# 3. 隐式等待 设置 防止预售的网络的阻塞driver.implicitly_wait(10)# 4.1 开始选择规格【此处我选择了-12 mini】element_sku = driver.find_element_by_name('dimensionScreensize')driver.implicitly_wait(10)element_sku.click()# 4.2 选择颜色【此处我选择了-白色】element_color = driver.find_element_by_xpath(    '//*[@value="white"]')driver.execute_script("arguments[0].click();", element_color)driver.implicitly_wait(10)# 4.3 选择内存【此处我选择了-256g】element_memory = driver.find_element_by_xpath(    '//*[@value="256gb"]')driver.execute_script("arguments[0].click();", element_memory)driver.implicitly_wait(10)# 4.4 你是否有智能手机要折抵 【此处我选择了-没有旧机折扣】element_old = driver.find_element_by_xpath('//*[@id="noTradeIn"]')driver.execute_script("arguments[0].click();", element_old)driver.implicitly_wait(10)# 4.5 Applecare 【此处我选择了-无Applecare】element_care = driver.find_element_by_id('applecareplus_58_noapplecare_label')driver.execute_script("arguments[0].click();", element_care)driver.implicitly_wait(10)# 4.6 添加到购物袋element_car = driver.find_element_by_xpath(    '//*[@value="add-to-cart"]')driver.execute_script("arguments[0].click();", element_car)driver.implicitly_wait(10)# 5 页面跳转查看购物袋element_check = driver.find_element_by_xpath(    '//*[@value="proceed"]')driver.execute_script("arguments[0].click();", element_check)driver.implicitly_wait(10)# 6 结账element_check_out = driver.find_element_by_xpath(    '//*[@id="shoppingCart.actions.navCheckout"]')driver.execute_script("arguments[0].click();", element_check_out)driver.implicitly_wait(10)# 7.1 输入用户名element_username = driver.find_element_by_id(    'signIn.customerLogin.appleId')element_username.send_keys('appleId账号')driver.implicitly_wait(10)# 7.2 输入密码element_password = driver.find_element_by_id(    'signIn.customerLogin.password')element_password.send_keys('密码')driver.implicitly_wait(10)# 7.3 点击登录element_login = driver.find_element_by_id(    'signin-submit-button')element_login.click()driver.implicitly_wait(10)# 8.1 你希望如何收到订单商品  【此处我选择了-我要取货】element_want_order = driver.find_element_by_id(    'fulfillmentOptionButtonGroup1')driver.execute_script("arguments[0].click();", element_want_order)driver.implicitly_wait(10)# 8.2 点击显示此地附近的零售店element_selectdistrict = driver.find_element_by_xpath(    '//*[@aria-describedby="rs-fulfillment-storelocator-error"]')driver.execute_script("arguments[0].click();", element_selectdistrict)driver.implicitly_wait(10)# 8.3 点击山东element_provice = driver.find_element_by_xpath(    '//*[@value="山东"]')driver.execute_script("arguments[0].click();", element_provice)driver.implicitly_wait(10)# 8.4 点击青岛element_city = driver.find_element_by_xpath(    '//*[@value="青岛"]')driver.execute_script("arguments[0].click();", element_city)driver.implicitly_wait(10)# 8.5 点击市南element_area = driver.find_element_by_xpath(    '//*[@value="市南区"]')driver.execute_script("arguments[0].click();", element_area)driver.implicitly_wait(20)# 8.6 选择取货零售店 【此处我选择了-Apple 青岛万象城】element_pickupTab = driver.find_element_by_id(    'checkout.fulfillment.pickupTab.pickup.storeLocator-R557')driver.execute_script("arguments[0].click();", element_pickupTab)driver.implicitly_wait(20)# 8.7 选择取货时间 【根据时间自己定】element_pickup_time = driver.find_element_by_xpath(    '//*[@value="11"]')driver.execute_script("arguments[0].click();", element_pickup_time)driver.implicitly_wait(10)# 8.8 选择取货时间段 【此处我选择了-默认第一个时间段】element_time_quantum = driver.find_element_by_xpath(    '//*[@aria-labelledby="timeWindows_label"]')Select(element_time_quantum).select_by_index(1)driver.implicitly_wait(15)# 8.9 继续填写取货详情element_checkout = driver.find_element_by_id(    'rs-checkout-continue-button-bottom')driver.implicitly_wait(15)driver.execute_script("arguments[0].click();", element_checkout)element_checkout.click()driver.implicitly_wait(10)# 9.1 请填写收件人手机号码element_Phone = driver.find_element_by_name('fullDaytimePhone')element_Phone.send_keys('手机号')driver.implicitly_wait(10)# 9.2 请填写收件人身份证element_nationalId = driver.find_element_by_name('nationalId')element_nationalId.send_keys('身份证')driver.implicitly_wait(10)# 9.3 检查订单element_checkoutPay = driver.find_element_by_id(    'rs-checkout-continue-button-bottom')driver.execute_script("arguments[0].click();", element_checkoutPay)driver.implicitly_wait(10)# 10 立即下单 【此处我选择了-微信支付】element_billingOptions = driver.find_element_by_id(    'checkout.billing.billingOptions.options.2')driver.execute_script("arguments[0].click();", element_billingOptions)driver.implicitly_wait(10)# 11.1 确定element_orderPay = driver.find_element_by_id(    'rs-checkout-continue-button-bottom')driver.execute_script("arguments[0].click();", element_orderPay)driver.implicitly_wait(15)# 12 确认订单element_endPay = driver.find_element_by_xpath(    '//*[@aria-describedby="rs-checkout-continuedisclaimer-bottom"]')driver.execute_script("arguments[0].click();", element_endPay)driver.implicitly_wait(15)# 11 退出浏览器time.sleep(10)# driver.quit()print("iphone12 自动化测试结束")
启动

python apple-12.py

全自动操作过程动图

iphone13到底香不香,真的这么难抢?

Tip

其中账号密码相关需要替换成自己的,并且苹果官网会有卡顿延时,及403等异常,属于正常情况。

3.iphone13 预约抢购的python+selenium自动化测试脚本【只针对谷歌浏览器】

前置条件同iphone 12
Tips

因iphone13 无货,代码中加入了一个while判断,重复拉取省市区进行有无货的重新加载

python 代码
from selenium import webdriverfrom datetime import datetimefrom selenium.webdriver.support.select import Selectimport pdbimport time# iphone13 自动化测试print("iphone13 自动化测试开始")# 访问测试的url定义url = "https://www.apple.com.cn/shop/buy-iphone/iphone-13-pro"# 1. 创建浏览器对象  这里的Chrome中的变量是chromedriver的驱动地址driver = webdriver.Chrome()# 2. 跳转到apple官网driver.get(url)# 3. 隐式等待 设置 防止预售的网络的阻塞driver.implicitly_wait(10)# 4. 开始选择规格【此处我选择了-13 pro】element_sku = driver.find_element_by_name('dimensionScreensize')driver.implicitly_wait(10)element_sku.click()# 4.2 选择颜色【此处我选择了-银色】element_color = driver.find_element_by_xpath(    '//*[@value="silver"]')driver.execute_script("arguments[0].click();", element_color)driver.implicitly_wait(10)# 4.3 选择内存【此处我选择了-256g】element_memory = driver.find_element_by_xpath(    '//*[@value="256gb"]')driver.execute_script("arguments[0].click();", element_memory)driver.implicitly_wait(10)# 4.4 你是否有智能手机要折抵 【此处我选择了-没有旧机折扣】element_old = driver.find_element_by_xpath('//*[@id="noTradeIn"]')driver.execute_script("arguments[0].click();", element_old)driver.implicitly_wait(10)# 4.5 Applecare 【此处我选择了-无Applecare】element_care = driver.find_element_by_id('iphonexs_ac_iup_noapplecare_label')driver.execute_script("arguments[0].click();", element_care)driver.implicitly_wait(10)# 4.6 添加到购物袋element_car = driver.find_element_by_xpath(    '//*[@value="add-to-cart"]')driver.execute_script("arguments[0].click();", element_car)driver.implicitly_wait(10)# 5 页面跳转查看购物袋element_check = driver.find_element_by_xpath(    '//*[@id="root"]/div[2]/div/div/div[2]/div/form/button')driver.execute_script("arguments[0].click();", element_check)driver.implicitly_wait(10)# 6 结账element_check_out = driver.find_element_by_xpath(    '//*[@id="shoppingCart.actions.checkout"]')driver.execute_script("arguments[0].click();", element_check_out)driver.implicitly_wait(10)# 7.1 输入用户名element_username = driver.find_element_by_id(    'signIn.customerLogin.appleId')element_username.send_keys('苹果appleId')driver.implicitly_wait(10)# 7.2 输入密码element_password = driver.find_element_by_id(    'signIn.customerLogin.password')element_password.send_keys('密码')driver.implicitly_wait(10)# 7.3 点击登录element_login = driver.find_element_by_id(    'signin-submit-button')element_login.click()driver.implicitly_wait(10)# 8.1 你希望如何收到订单商品  【此处我选择了-我要取货】element_want_order = driver.find_element_by_id(    'fulfillmentOptionButtonGroup1')driver.execute_script("arguments[0].click();", element_want_order)driver.implicitly_wait(10)# 8.2 点击显示此地附近的零售店selectdistrict = driver.find_element_by_xpath(    '//*[@aria-describedby="rs-fulfillment-storelocator-error"]')driver.execute_script("arguments[0].click();", selectdistrict)driver.implicitly_wait(10)# 8.3 点击山东element_provice = driver.find_element_by_xpath(    '//*[@value="山东"]')driver.execute_script("arguments[0].click();", element_provice)driver.implicitly_wait(10)# 8.4 点击青岛element_city = driver.find_element_by_xpath(    '//*[@value="青岛"]')driver.execute_script("arguments[0].click();", element_city)driver.implicitly_wait(10)# 8.5 点击市南element_area = driver.find_element_by_xpath(    '//*[@value="市南区"]')driver.execute_script("arguments[0].click();", element_area)driver.implicitly_wait(20)# 因为无货需要判断元素是否可以点击isOK = driver.find_element_by_id(    'checkout.fulfillment.pickupTab.pickup.storeLocator-R557').is_enabled()isOKFlag = bool(1 - isOK)#print("准备isOKFlag   " + str(isOKFlag))# while循环查看是否有货while isOKFlag:    try: # 重新调用省市区 #print("进来了isOKFlag   " + str(isOKFlag)) driver.implicitly_wait(20) selectdistrict = driver.find_element_by_xpath(     '//*[@aria-describedby="rs-fulfillment-storelocator-error"]') driver.execute_script("arguments[0].click();", selectdistrict) driver.implicitly_wait(20) provice = driver.find_element_by_xpath(     '//*[@value="山东"]') driver.execute_script("arguments[0].click();", provice) city = driver.find_element_by_xpath(     '//*[@value="青岛"]') driver.execute_script("arguments[0].click();", city) area = driver.find_element_by_xpath(     '//*[@value="市南区"]') driver.execute_script("arguments[0].click();", area) driver.implicitly_wait(20) isOK = driver.find_element_by_id(     'checkout.fulfillment.pickupTab.pickup.storeLocator-R557').is_enabled() isOKFlag = bool(1 - isOK) #print("最后了isOK   " + str(isOKFlag))    except: print("异常了   ") break# tips: 经验证,苹果官网如果在付款页面之前实体店无货,若有货后在结算页面也无法选择实体店# 8.6 选择取货零售店 【此处我选择了-Apple 青岛万象城】element_pickupTab = driver.find_element_by_id(    'checkout.fulfillment.pickupTab.pickup.storeLocator-R557')driver.execute_script("arguments[0].click();", element_pickupTab)driver.implicitly_wait(20)# 8.7 选择取货时间 【根据时间自己定】element_pickup_time = driver.find_element_by_xpath(    '//*[@value="11"]')driver.execute_script("arguments[0].click();", element_pickup_time)driver.implicitly_wait(10)# 8.8 选择取货时间段 【此处我选择了-默认第一个时间段】element_time_quantum = driver.find_element_by_xpath(    '//*[@aria-labelledby="timeWindows_label"]')Select(element_time_quantum).select_by_index(1)driver.implicitly_wait(15)# 8.9 继续填写取货详情element_checkout = driver.find_element_by_id(    'rs-checkout-continue-button-bottom')driver.implicitly_wait(15)driver.execute_script("arguments[0].click();", element_checkout)element_checkout.click()driver.implicitly_wait(20)# 9.1 请填写收件人手机号码element_Phone = driver.find_element_by_name('fullDaytimePhone')element_Phone.send_keys('电话')driver.implicitly_wait(10)# 9.2 请填写收件人身份证element_nationalId = driver.find_element_by_name('nationalId')element_nationalId.send_keys('身份证号')driver.implicitly_wait(10)# 9.3 检查订单element_checkoutPay = driver.find_element_by_id(    'rs-checkout-continue-button-bottom')driver.execute_script("arguments[0].click();", element_checkoutPay)driver.implicitly_wait(10)# 10 立即下单 【此处我选择了-微信支付】element_billingOptions = driver.find_element_by_id(    'checkout.billing.billingOptions.options.2')driver.execute_script("arguments[0].click();", element_billingOptions)driver.implicitly_wait(10)# 11.1 确定element_orderPay = driver.find_element_by_id(    'rs-checkout-continue-button-bottom')driver.execute_script("arguments[0].click();", element_orderPay)driver.implicitly_wait(15)# 12 确认订单element_endPay = driver.find_element_by_xpath(    '//*[@aria-describedby="rs-checkout-continuedisclaimer-bottom"]')driver.execute_script("arguments[0].click();", element_endPay)driver.implicitly_wait(15)# 11 退出浏览器time.sleep(10)# driver.quit()print("iphone13 自动化测试结束")
启动

python apple-13.py

全自动操作过程动图

iphone13到底香不香,真的这么难抢?

脚本成果

在这里插入图片描述

写在最后

以上订单均为测试所用,本菜狗并没有购买iphone,也希望大家还是多多支持国货,没有针对,没有道德绑架,只是希望我们国家产物越来越优秀❤️

我是JavaDog,谢谢博友耐心看完, 抽空来我狗窝🐕瞅瞅呗 blog.javadog.net
在这里插入图片描述