使用Java基于selenium实现淘宝秒杀自动化

发布于:2022-11-29 ⋅ 阅读:(246) ⋅ 点赞:(0)

前言

无意在论坛刷到了基于Python实现淘宝秒杀的小demo,觉得挺有意思的,就用Python写了一下

# 淘宝清空购物车装置
import time

# 新版的selenium和老版的有区别,坑死我了
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

ShoppingTime = "19:00"

# 先登录
driver.get("https://login.taobao.com/member/login.jhtml?f=top&redirectURL=http%3A%2F%2Fwww.taobao.com%2F/")
time.sleep(15)

# 进入购物车
driver.get("https://cart.taobao.com/cart.htm?from=mini&ad_id=&am_id=&cm_id=&pm_id=1501036000a02c5c3739")

time.sleep(2)
# 选中全选
all = driver.find_element(By.XPATH,'/html/body/div[1]/div[3]/div/div/div[2]/div[1]/div/div['
                              '1]/div/div/label')
if all :
    all.click()

time.sleep(1)
buy = driver.find_element(By.XPATH,'/html/body/div[1]/div[3]/div/div/div[4]/div[2]/div[3]/div[5]/a')

后来写时间判断的时候发现时间格式要转来转去的,Python是真的不熟,想到openqa好像也有selenium,就试一下用Java去写,简单搜了一下用Java写这个的真不多,自己折腾一下咯,不过涉及到爬虫还是推荐用Python去当主语言写,库多教程也多,少走弯路。

第一步 安装ChromeDriver

默认大家都用Chrome咯,下载地址:

https://sites.google.com/a/chromium.org/chromedriver/home

因为我是mac环境,下好chromedriver之后直接拷贝在/usr/local/bin下就行啦
在这里插入图片描述
拷贝的时候注意需要管理员权限,按个指纹就完了
也可以放在其他位置,写Java的时候用代码配一下就行

        System.setProperty("webdriver.chrome.driver", "/Users/beamstark/Desktop/chromedriver");

第二步 导包

默认大家都用Maven

  <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.14.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>27.0-jre</version>
        </dependency>

第三步 测试

还是Java顺手,简单写个demo试一下

package com;

import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author BeamStark
 * @date 2022-10-08-08:58
 */
public class TEST {
    public static void main(String[] args) {
        ChromeDriver chromeDriver = new ChromeDriver();
        chromeDriver.get("https://www.baidu.com");
        chromeDriver.findElementById("kw").sendKeys("啦啦啦");
        chromeDriver.findElementById("su").click();
    }
}

点击运行
在这里插入图片描述
bingo~
但是这个时候控制台会报错(无伤大雅)
在这里插入图片描述
说的好像是不安全之类的,只能本地运行,mac的权限始终没有搞明白 :(
在这里插入图片描述

第四步 用代码帮我们买东西

package com;

import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 用Java实现淘宝秒杀自动化
 * @author BeamStark
 * @date 2022-10-08-08:58
 */
@Slf4j
public class WhereIsMyMoney {
    private static String ShoppingTime = "2022-10-09 04:02:00";

    public static void main(String[] args) throws InterruptedException {
        log.info("开始时间:" + LocalDateTime.now());
//        初始化驱动
        ChromeDriver chromeDriver = new ChromeDriver();
//        初始化等待时间
        WebDriverWait wait15s = new WebDriverWait(chromeDriver,15000);
        WebDriverWait wait1s = new WebDriverWait(chromeDriver,1000);
//        先登录
        chromeDriver.get("https://login.taobao.com/member/login" +
                ".jhtml?f=top&redirectURL=http%3A%2F%2Fwww.taobao.com%2F/");
        chromeDriver.findElementByXPath("/html/body/div/div[2]/div[3]/div/div/div/div[1]/i").click();
        log.info("等待登录");
//        进入购物车
        wait15s.until(ExpectedConditions.presenceOfElementLocated(By.xpath("/html/body/div[1]/div[1" +
                "]/div/ul[2]/li[3]/div[1]/a/span[2]"))).click();
//        选中购物车的第一个
        wait1s.until(ExpectedConditions.presenceOfElementLocated(By.xpath("/html/body/div[1]/div[3]/div/div/div[2]/div[2]/div[1" +
                "]/div/div[1]/div/div/label"))).click();
        log.info("选中,等待下单");
        Thread.sleep(500);
//        等待下单
        while (true) {
            if (LocalDateTime.now().isAfter(LocalDateTime.parse(ShoppingTime,
                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))) {
//              结算!
                chromeDriver.findElementByClassName("submit-btn").click();
                log.info("结算");
//              锁单
                wait1s.until(ExpectedConditions.presenceOfElementLocated(By.xpath("/html/body/div[1" +
                        "]/div[3]/div/div[1]/div[1]/div/div[9]/div/div/a[2]"))).click();
                log.info("锁单");
                System.out.println("下单成功,去支付吧! 完成时间:" + LocalDateTime.now());
                break;
            }
        }
//      5秒后关闭
        Thread.sleep(5000);
        chromeDriver.quit();
    }
}

在这里插入图片描述
三次连续测试通过
测试用时平均值0.8s左右(与网速和页面响应速度有关,以Chrome内核为准,没测过其他浏览器内核),反正比手动快多了就是了而且也不费心,该打游戏打游戏该刷剧刷剧,就挂着呗~

写在后面

感谢大家看到这里:》

此程序没有设置给你付款的代码,只会帮你锁单(给你留有后悔的余地),请大家合理消费
~洗洗睡啦 : )

参考文章:https://blog.csdn.net/chenjxj123/article/details/121802904

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到