python selenium 模拟浏览器自动操作抢购脚本

每逢秒杀,都在遗憾网速和手速慢没能抢购到商品吧。

手写一个脚本,让程序帮你抢,抢到的概率会大大提升。

废话不多说,直接上代码。

本实例以华为官网抢购手机为例

"""
模拟浏览器操作华为官网

(1) 【只需要安装一种driver即可】 
one: 安装 chromedriver 
a. 去官网 (http://chromedriver.storage.googleapis.com/index.html) 下载对应版本的driver
b. 解压后将exe文件放入本地谷歌浏览器的安装目录 例如: C:\Program Files\Google\Chrome\Application
c. 配置将谷歌安装目录配置到系统环境变量的Path中
two: 安装 edgedriver
a.去官网  (https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) 下载对应版本的driver
b. 解压后将exe文件放入Edge浏览器的安装目录 例如: C:\Program Files (x86)\Microsoft\Edge\Application

(2) 安装python
(3) 安装 selenium 
    指令: pip install selenium
(4) 打开此文件, 修改    账号参数: userName, password 手机抢购页面链接参数: phonePageUrl 抢购时间参数: buyTimeStr
(5) 设置号华为官网的收货地址
"""

from selenium import webdriver
from selenium.webdriver.common import by
import time
import re

 driver = webdriver.Chrome()
# driver = webdriver.Edge()
elementBy = by.By()
# 账号
userName = "134*****38"
password = "l*****6"
# 首页
indexUrl = "https://www.vmall.com/index.html"
# 想要抢购的手机页面
# phonePageUrl = "https://www.vmall.com/product/10086213682650.html#2601010448909"
phonePageUrl = "https://www.vmall.com/product/comdetail/index.html?prdId=10086238622707&sbomCode=2601010388226"
# 提交订单url
submitOrderUrl = "/order/nowConfirmcart"
buyTimeStr = "2023-07-13 20:00:00"

def main():
    # 先登录
    login()
    # 指定时间, 未到时间则阻塞
    curTime = time.time()
    buyTime = time.mktime(time.strptime(buyTimeStr,"%Y-%m-%d %H:%M:%S"))
    while curTime < buyTime : 
        print("当前时间戳:{}, 抢购时间戳:{}".format(curTime,buyTime) , end="\n")
        time.sleep(10)
        curTime = time.time()
    # 抢购
    if re.search("comdetail", phonePageUrl) is not None :
        buyTwo()
    else :
        buy()
    

def login():
    print("登录")
    driver.get(indexUrl)
    time.sleep(5)
    # pc网页
    indexLoginBns = driver.find_elements(elementBy.CLASS_NAME, "r-gy4na3")
    if not indexLoginBns: 
        for bn in indexLoginBns:
            if bn.text == "请登录":
                bn.click()
                break
    else :
        # 移动网页
        indexLoginBns = driver.find_elements(elementBy.CLASS_NAME,"r-1ff274t")
        for bn in indexLoginBns:
            if bn.text == "登录":
                bn.click()
                break

    time.sleep(5)
    loginElements = driver.find_elements(elementBy.CSS_SELECTOR, ".hwid-input-root")
    for e in loginElements:
        inputele = e.find_element(elementBy.TAG_NAME, "input")
        attr = inputele.get_attribute("type")
        if attr == "text":
            inputele.send_keys(userName)
        elif attr == "password":
            inputele.send_keys(password)

    loginBtnElement = driver.find_element(elementBy.CSS_SELECTOR, ".hwid-login-btn")
    loginBtnElement.click()
    #需要手机验证码 
    # 此处手动完成验证码验证 预留一分钟
    time.sleep(60)
    print("登录成功")


"""
华为商品页不统一,此方法为抢购按钮是立即下单的
"""
def buy():
    driver.get(phonePageUrl)
    time.sleep(5)
    print("打开指定手机 --> 准备抢购")
    driver.refresh()
    time.sleep(5)
    buyBtns = driver.find_elements(elementBy.CLASS_NAME, "product-button02")
    cur_url = driver.current_url
    canBuy = False
    if buyBtns is None:
        print("无法获取下单按钮")
        return

    time.sleep(2)
    # 如果没有进入提交订单页面则一直点击立即下单
    buyCountNum = 1
    while not re.search(submitOrderUrl, cur_url) and not canBuy :
        for buybn in buyBtns:
            if buybn.find_element(elementBy.TAG_NAME, "span").text == "立即下单" :
                # 此元素被设置了javascript:; , 所以click()无法触发,只能通过执行execute_script执行网页js方法
                driver.execute_script('ec.product.orderNow(null,null,this)')
                # buybn.click()
                canBuy = True
                print("点击下单按钮次数: {}".format(buyCountNum))
                buyCountNum += buyCountNum
                break

    if canBuy == True :
        # 预留时间选地址
        time.sleep(5)
        submitBtn = driver.find_element(elementBy.CLASS_NAME,"order-submit-btn")
        if submitBtn is None: 
            print("无法提交订单")              
        else :
            print("提交订单")
            # submitBtn.click()
            driver.execute_script("ec.order.submit();")
                    
        # 预留时间等待提交响应结束
        time.sleep(60) 

"""
华为商品页不统一,此方法为抢购按钮是立即购买的
此商品详情每一步都会新开页面
""" 
def buyTwo() :
    driver.get(phonePageUrl)
    time.sleep(5)
    print("打开指定手机 --> 准备抢购")
    driver.refresh()
    time.sleep(5)
    cur_url = driver.current_url
    canBuy = False

    time.sleep(2)
    # 如果没有进入提交订单页面则一直点击立即下单
    buyCountNum = 1

    buyButtonScript = """
        this.document
        .getElementsByClassName("css-901oao r-jwli3a r-1i10wst r-13uqrnb r-16dba41 r-oxtfae r-rjixqe r-6dt33c r-lrvibr")[0]
        .click();
    """

    while not re.search(submitOrderUrl, cur_url) and not canBuy :
        # 通过执行execute_script执行网页js方法
        driver.execute_script(buyButtonScript)
        # 预留反应时间
        time.sleep(2)
        # 切换到最右边的网页窗口
        driver.switch_to.window(driver.window_handles[-1])
        cur_url = driver.current_url
        print("点击下单按钮次数: {}".format(buyCountNum))
        buyCountNum += buyCountNum
        if re.search(submitOrderUrl, cur_url) is not None :
            canBuy = True
            break

    if canBuy == True :
        # 切换到最右边的网页窗口
        driver.switch_to.window(driver.window_handles[-1])
        # 预留时间选地址
        time.sleep(5)
        submitBtn = driver.find_element(elementBy.CLASS_NAME,"order-submit-btn")
        if submitBtn is None: 
            print("无法提交订单")              
        else :
            print("提交订单")
            # submitBtn.click()
            driver.execute_script("ec.order.submit();")

        # 预留时间等待提交响应结束
        time.sleep(60) 
    

# 运行主函数
main()

  • 6
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 写一个自动抢购京东茅台的脚本需要以下步骤: 1. 打开京东茅台商品页面,确定你想要抢购的商品的 URL。 2. 使用 Python 的网络爬虫模块,例如 requests 库,来爬取商品页面的 HTML 代码。 3. 解析 HTML 代码,找到抢购按钮的位置。 4. 使用 Python自动化测试模块,例如 selenium,来模拟点击抢购按钮。 5. 设置一个循环,不断检查商品是否已经抢购成功。如果成功,退出循环;如果未成功,继续循环。 下面是一个简单的示例代码: ```python import time from selenium import webdriver # 打开浏览器 driver = webdriver.Chrome() # 访问商品页面 driver.get("商品页面 URL") while True: # 点击抢购按钮 driver.find_element_by_css_selector("抢购按钮的 CSS 选择器").click() # 检查是否抢购成功 result = driver.find_element_by_css_selector("抢购结果的 CSS 选择器").text if result == "抢购成功": print("抢购成功!") break else: print("抢购未成功,继续尝试...") # 等待一段时间再继续尝试 time.sleep(1) # 关闭浏览器 driver. ### 回答2: 使用Python写一个自动抢购京东茅台的脚本有以下步骤: 1. 导入相关的模块,如selenium和webdriver,用于实现自动操作。 2. 设置浏览器驱动,如ChromeDriver,确保能在代码中对浏览器进行控制。 3. 打开京东网站,并登录账号。 4. 进入茅台商品页面,获取抢购按钮的位置和状态。 5. 判断抢购按钮的状态,如果是可点击状态,则点击抢购按钮。 6. 进入结算页面,选择收货地址、支付方式等相关信息。 7. 确认订单并完成支付。 上述步骤中,一般比较关键的是第4步和第5步。在第4步中,需要通过网页元素定位的方式找到抢购按钮,并获取其状态信息,常用的定位方式有XPath和CSS选择器。在第5步中,需要判断抢购按钮的状态,如果是可点击状态,则调用点击操作,实现抢购功能。 在编写脚本时,可以结合selenium的API文档和浏览器开发者工具来查找和定位页面元素,以及了解元素的属性和状态。此外,还可以使用隐式等待或显式等待来确保页面加载完毕后再进行操作,避免因页面未加载完而导致的错误。 需要注意的是,使用自动脚本抢购商品可能会违反京东的使用规定,甚至涉及到法律问题。因此,在实际操作中应遵循相关法律法规和京东的规定,建议合法合规地使用自动脚本,并确保不会对他人造成不公平竞争或恶意利用的影响。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值