• 使用Python抢购商品


    前言

    注意:示例代码仅供学习使用,禁止不正当盈利。

    本文使用Python的selenium库通过Chrome浏览器来抢购商品。首先需要准备好Python3开发环境,本文使用的版本是Python3.6,编辑器使用的是PyCharm,浏览器使用Chrome。使用教程详见下文。

    准备工作

    安装selenium

    使用pip安装selenium库,命令如下:

    pip install selenium
    
    • 1

    在PyCharm中可以点击Terminal输入pip命令,如下图:
    在这里插入图片描述

    下载ChromeDriver

    查看Chrome版本
    首先需要查看Chrome浏览器的版本,再下载对应版本的ChromeDriver,查看Chrome版本的方法如下:打开Chrome,点击设置,找到关于Chrome,右侧即可查看Chrome版本,如下图:
    在这里插入图片描述

    下载对应版本的ChromeDriver

    ChromeDriver下载地址:链接

    首先需要连接国际网络,打开ChromeDriver下载页面,找到对应的版本,复制win64平台(若Chrome浏览器为32位,则选择win32平台)的URL,输入到浏览器中进行下载,如下图:
    在这里插入图片描述

    配置ChromeDriver
    要使用ChromeDriver,还需将其添加至系统环境变量。方法如下,将下载好的压缩包解压,将其中的chromedriver.exe文件复制到Python环境目录的Script文件夹中,若使用的是虚拟环境,则要复制到Python虚拟环境中的Script文件夹中,如下图:
    在这里插入图片描述

    若Script文件夹不在系统环境变量中,则需要将其添加至系统环境变量,如下图:
    在这里插入图片描述
    在这里插入图片描述

    也可将chromedriver.exe保存在其它文件夹,并将此文件夹添加至系统环境变量。

    编写抢购商品py脚本

    导入库

    首先需要导入selenium库:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    • 1
    • 2

    还需要导入一些与时间相关的库:

    import time
    import datetime
    
    • 1
    • 2

    selenium使用方法

    打开Chrome浏览器:

    browser = webdriver.Chrome()
    
    • 1

    打开网页:

    # 打开网页
    browser.get("https://www.xxxxxx.com")
    # 打开淘宝网页
    browser.get("https://www.taobao.com")
    
    • 1
    • 2
    • 3
    • 4

    定位元素:

    # find_element(By.LINK_TEXT, "text") 同 find_element_by_link_text("text")
    # 其它定位函数同理
    
    # 通过ID定位
    browser.find_element(By.ID, "id")
    # or
    browser.find_element_by_id("id")
    
    # 通过链接文本定位
    browser.find_element(By.LINK_TEXT, "text")
    # or
    browser.find_element_by_link_text("text")
    
    # 通过xpath定位,适用于元素按钮
    browser.find_element_by_xpath('//span[contains(text(),"立即下单")]')  # 根据文本定位
    browser.find_element_by_xpath('//span[@id="id"]')  # 根据属性
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    点击元素:

    browser.find_element(By.LINK_TEXT, "text").click()
    
    • 1

    更多使用方法请参考selenium官方文档:链接

    示例代码

    此处代码仅供学习使用,禁止不正当盈利。
    代码说明及用法可参考注释,此处不再进行说明。

    淘宝网

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    import datetime
    
    # 抢购时间
    times = "2023-08-20 10:20:00.000000"
    
    # 打开谷歌浏览器
    browser = webdriver.Chrome()
    time.sleep(1)
    browser.get("https://www.taobao.com")
    time.sleep(1)
    # 扫码登录,可在淘宝APP处扫码登录
    # find_element(By.LINK_TEXT, "value") 同 find_element_by_link_text("value")
    browser.find_element(By.LINK_TEXT, "亲,请登录").click()
    print("请扫码")
    time.sleep(10)
    browser.get("https://cart.taobao.com/cart.htm")
    print("已进入购物车")
    time.sleep(5)
    while 1:
        # 勾选所有商品
        if browser.find_element(By.ID, "J_SelectAll1"):
            browser.find_element(By.ID, "J_SelectAll1").click()
            break
    
    while 1:
        n = 0  # 抢购次数
        isSuccess = 0  # 是否成功
        nowTime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
        if nowTime >= times:
            print("开始抢购:", nowTime)
            while 1:
                try:
                    if browser.find_element(By.LINK_TEXT, "结 算"):
                        browser.find_element(By.LINK_TEXT, "结 算").click()
                        print("已帮您抢到该商品")
                        break
                except:
                    pass
                finally:
                    n += 1
                    print("抢购次数:", n)
            time.sleep(0.01)
            # 点击提交订单按钮
            print("开始提交订单")
            while 1:
                try:
                    if browser.find_element_by_link_text('提交订单'):
                        browser.find_element_by_link_text('提交订单').click()
                        isSuccess = 1
                        print("抢购成功,请尽快付款")
                        break
                except:
                    pass
            time.sleep(0.01)
            if isSuccess:
                break
        else:
            print("未开始:", nowTime)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    华为商城

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    import datetime
    
    # 抢购时间
    times = "2023-08-20 10:20:00.000000"
    
    # 打开谷歌浏览器
    browser = webdriver.Chrome()
    time.sleep(1)
    
    # 华为商场首页
    # browser.get("https://www.vmall.com/index.html")
    # 商品页
    browser.get("https://www.vmall.com/product/xxxxxx.html")
    time.sleep(5)
    # 扫码登录,可在华为手机设置中的华为账号处扫码登录
    # find_element(By.LINK_TEXT, "value") 同 find_element_by_link_text("value")
    browser.find_element(By.LINK_TEXT, "立即登录").click()  # 预定商品
    # browser.find_element(By.LINK_TEXT, "请登录").click()  # 普通商品
    print("请扫码")
    time.sleep(20)
    
    '''
    browser.get("https://cart.taobao.com/cart.htm")
    print("已进入购物车")
    time.sleep(5)
    while 1:
        if browser.find_element(By.ID, "J_SelectAll1"):
            browser.find_element(By.ID, "J_SelectAll1").click()
            break
    '''
    
    while 1:
        n = 0  # 抢购次数
        isSuccess = 0  # 是否成功
        nowTime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
        if nowTime >= times:
            print("开始抢购:", nowTime)
            while 1:
                try:
                    # 普通商品
                    # if browser.find_element(By.LINK_TEXT,"立即下单"):
                    #     browser.find_element(By.LINK_TEXT,"立即下单").click()
                    #     print("已帮您抢到该商品")
                    #     break
                    # 预定商品
                    if browser.find_element_by_xpath('//span[contains(text(),"立即下单")]'):
                        browser.find_element_by_xpath('//span[contains(text(),"立即下单")]').click()
                        print("已帮您抢到该商品")
                        break
                except:
                    pass
                finally:
                    n += 1
                    print("抢购次数:", n)
            time.sleep(0.01)
            # 点击提交订单按钮
            print("开始提交订单")
            while 1:
                try:
                    if browser.find_element_by_link_text("提交订单"):
                        browser.find_element_by_link_text("提交订单").click()
                        isSuccess = 1
                        print("提交订单成功,请尽快付款")
                        break
                except:
                    pass
            time.sleep(0.01)
            if isSuccess:
                break
        else:
            print("未开始:", nowTime)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
  • 相关阅读:
    jsp实现登录界面
    java116-arraylist集合实现类
    下雨天客流量少,美容院怎么做生意
    Asp-Net-Core开发笔记:使用RateLimit中间件实现接口限流
    数据库基础篇二
    【Jmeter】提取和引用Token
    [附源码]计算机毕业设计springboot房屋租赁系统
    而今迈步从头越|nacos逼我在mac上重新安装java8与环境变量的配置
    推荐一个图像生成开源项目——Fooocus
    内存中的swap机制
  • 原文地址:https://blog.csdn.net/NSJim/article/details/133056240