昨天用
Python
写了个淘宝脚本,今天用node
写一个。
思路
- 打开需要秒杀商品的页面(会提示你登录,扫码登录)
- 选择商品的规格,不然是购买不了的(手动)
- 定时器刷新页面,如果有货,则购买
- 点击购买按钮,进入结算
- 点击结算,进入交易
- 这个时候,要么你直接在网站上面输入密码,要么你打开手机淘宝,可以看到待支付订单,说明是抢到了,需要支付了。
代码
const dayjs = require("dayjs");
const { Builder } = require("selenium-webdriver");
const driver = new Builder().forBrowser("chrome").build();
// 最大化浏览器
driver.manage().window().maximize();
// 需要抢购的商品页面链接
const url =
"https://detail.tmall.com/item.htm?areaId=610100&cat_id=2&id=42302551887&is_b=1&rn=ee9ddd89a20cdfdbf21dbcf8c4f6a6da&skuId=4228835266195&spm=a220m.1000862.1000725.1.7cdb8dfc4OMuMJ";
// 类似于python中time的sleep函数
const sleep = (time) => {
return new Promise((resolve) => {
setTimeout(resolve, time * 1000);
});
};
let timer = null;
const open = async () => {
// 打开网页
driver.get(url);
console.log("请在20秒内完成扫码");
await sleep(20);
console.log("请在15秒内选择购买商品的规格");
await sleep(15);
find();
};
// 查询是否有货
const find = async () => {
timer = setInterval(async () => {
const count = await driver
.findElement({ className: "quantityTip" })
.getText();
console.log("count", count);
if (count) {
const text = count.match(/有货/gi);
if (text.length > 0) {
console.log(
`有货时间:${dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss")}`
);
clearInterval(timer);
buy(text.length);
}
}
}, 1000);
};
// 购买
const buy = async (num) => {
while (true) {
if (num > 0) {
try {
driver
.findElement({ className: "Actions--leftBtn--3kx8kg8" })
.then((res) => {
res.click();
console.log("进入结算页面");
submit();
});
} catch (error) {
console.log("error", error);
}
break;
}
}
};
// 提交订单
const submit = async () => {
try {
await sleep(0.4);
driver.findElement({ className: "go-btn" }).then((res) => {
res.click();
console.log(
"抢购时间:",
dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss")
);
});
await sleep(1000);
} catch (error) {
console.log("error", error);
}
};
open();
结论
- 还是很方便的直接跳转道支付页面了,输入密码就可以直接购买。
传送门:Python版本