nodejs | 在商品页面秒杀

84 阅读1分钟

昨天用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版本

本文由mdnice多平台发布