node | 在商品页面秒杀

简介: 昨天用`Python`写了个淘宝脚本,今天用`node`写一个。

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

相关文章
|
资源调度 JavaScript 安全
可以在浏览器页面运行 node 代码了!webContainer 发布 1.0
可以在浏览器页面运行 node 代码了!webContainer 发布 1.0
354 0
|
数据采集 存储 移动开发
Node.js躬行记(26)——接口拦截和页面回放实验
Node.js躬行记(26)——接口拦截和页面回放实验
|
前端开发 JavaScript
基于node.js开发的文章生成器(七、网页版本的文章生成器--前端页面篇)
# 引言 经过前面六章的学习,我们已经有了很多知识的储备,本次我们来制作文章生成器的前端部分。 # 数据的传递 接下来这里我们的传递方式主要通过form表单和axios两种方式来传递数据。 ## 传统的form表单传递 传统的form表单传递方式首先通过`<form></form>`标签来完成。 ### 传统的form表单传递---练习测试 我们建立 csss.html和csss.js文件夹 csss.html代码如下: ``` <!DOCTYPE html> <html> <head> <title>xx</title> </head>
node笔记记录68登录页面简单2
node笔记记录68登录页面简单2
41 0
node笔记记录68登录页面简单2
node笔记记录67登录页面简单1
node笔记记录67登录页面简单1
34 0
node笔记记录67登录页面简单1
|
JavaScript 前端开发
【前端自动化】如何使用Node.js实现热重载页面
【前端自动化】如何使用Node.js实现热重载页面
|
前端开发 JavaScript Ruby
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-1.使用sass工具搭建前台web端页面
Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。
197 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-1.使用sass工具搭建前台web端页面
|
Web App开发 关系型数据库 PHP
|
编解码 JavaScript Ruby
Node 抓取非utf-8编码页面
代码示例 Nodejs抓取非utf8字符编码的页面 -- Ruby's Louvre var http = require('http'); var iconv = require('iconv-lite'); var url=require('url'); var html = ""; var getURL = url.
1021 0