小米商城优惠券抢购

2020-04-27 10:45:53 +08:00
 yinuxy

登录网址: https://account.xiaomi.com/ 活动页面: https://s1.mi.com/m/app/hd/index.html?id=15042 如题,我想买个小米手环但是小米商城里面的 5 折优惠券太难抢了,于是手写了一段代码(selenium)如下:

from selenium import webdriver
import time
import datetime
chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'  #chromedriver 的文件位置
browser = webdriver.Chrome(executable_path = chrome_driver)
 
def login(name ,pwd):
    browser.get( 'https://account.xiaomi.com/')#登录网址
    time.sleep(2)
    browser.find_element_by_id("username").send_keys(name) #利用账号标签的 ID,确定位置并 send 信息
    browser.find_element_by_id("pwd").send_keys(pwd) #利用密码标签的 ID,确定位置并 send 信息
    browser.find_element_by_id("login-button").click()#利用登录按钮的 ID,确定位置并点击
    #如果找不到标签 ID,可以使用其他方法来确定元素位置
    time.sleep(3)
    browser.get("https://s1.mi.com/m/app/hd/index.html?id=15042")#切换到秒杀页面
    print('登录成功,正在等待秒杀···')
 
def buy_on_time():
    while True: #不断刷新时钟
        now = datetime.datetime.now()
        if now.strftime('%H:%M:%S') == '09:00:00' or now.strftime('%H:%M:%S') == '11:00:00' or now.strftime('%H:%M:%S') == '15:00:00' or now.strftime('%H:%M:%S') == '17:00:00':
#        if now.strftime('%H:%M:%S') == buytime:
            browser.find_element_by_xpath("//div[@class='content-box flex-box']/a[@data-log_code='logcode#activity_code=wjsncc49&page=activity&page_id=15042&bid=3645414.0']/div/img").click()
#            browser.find_element_by_xpath("//a[@data-log_code='logcode#activity_code=1i19jyzh&page=activity&page_id=15042&bid=3645414.0']").click()
#            browser.find_element_by_xpath("//a[@data-log_code='logcode#activity_code=tudhbjjy&page=activity&page_id=15042&bid=3646017.0']").click() #购买按钮的 Xpath
#            browser.find_element_by_xpath("//a[@data-log_code='logcode#activity_code=qpohzak0&page=activity&page_id=15042&bid=3646017.0']").click()
            print('当前时段已抢购完毕')
        time.sleep(0.01)#注意刷新间隔时间要尽量短
 
login('username' , 'password')
time.sleep(10)
buy_on_time()#指定秒杀时间,并且开始等待秒杀

运行的时候发现了一个问题,直接运行的话会报错找不到元素

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <img src="//cdn.cnbj1.fds.api.mi-img.com/mi-mall/233e61ba38ffb86943fea320adb1607a.jpg"> is not clickable at point (394, 648). Other element would receive the click: <img src="https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/6e607d2e29651daa308b6310998f2991.png?w=216&amp;h=160&amp;bg=7FFFFF">
  (Session info: chrome=83.0.4103.7)

然后我每次都要在它运行之后在 Chromedriver 开的浏览器里面F12打开一下源码之后运行才不会报错,求问大佬这种优惠券的话该怎么抓取,能给个源码就更好啦!

5440 次点击
所在节点    Python
31 条回复
youngs
2020-04-27 11:03:01 +08:00
传说中的薅羊毛?
hunter2015
2020-04-27 11:04:53 +08:00
鉴定完毕,羊毛党
yinuxy
2020-04-27 11:05:43 +08:00
@youngs 这羊毛可不好薅,手工根本抢不到
evilic
2020-04-27 11:15:01 +08:00
偷懒的代码

```python
#!/usr/bin/python3
# -*- coding: UTF-8 -*-

import pyautogui

pyautogui.moveTo(968, 485) # 链接坐标
pyautogui.click(clicks=20000)
```
evilic
2020-04-27 11:16:39 +08:00
事实上,我也不知道代码能不能运行,因为我不抢券。
yinuxy
2020-04-27 11:19:15 +08:00
@evilic 额,这个好像不行
evilic
2020-04-27 11:33:42 +08:00
这种抢券的,正常应该是在 console 里加载 js 然后直接执行 js 发送请求的,不需要 selenium 的。
evilic
2020-04-27 11:48:55 +08:00
sigone
2020-04-27 12:27:22 +08:00
我觉得你不如写一个京东抢飞天茅台的外挂更有意义。
gunavy
2020-04-27 12:48:14 +08:00
能行?没有前段分流吗?
yinuxy
2020-04-27 12:58:02 +08:00
@evilic js 不会,只会 Python
yinuxy
2020-04-27 12:58:26 +08:00
@sigone 茅台要本钱呐
LZSZ
2020-04-27 13:22:40 +08:00
driver.find_elements_by_class_name('flex-box-item')[2].Click();
行不行?
zdnyp
2020-04-27 13:29:24 +08:00
selenium 不行的,速度太慢了。人家接口 2s 请求完了,你浏览器还没打开。
yinuxy
2020-04-27 13:43:22 +08:00
@zdnyp 那用啥呢
cquyf
2020-04-27 13:46:14 +08:00
大佬就是厉害
westoy
2020-04-27 13:46:43 +08:00
headless 是抢不到的, 别浪费时间了

真の黄牛都是直接怼接口的
heyhumor
2020-04-27 13:54:38 +08:00
xpath 不行就用 css_selector
yinuxy
2020-04-27 14:07:56 +08:00
@LZSZ 我去试试
yinuxy
2020-04-27 14:08:13 +08:00
@evilic 好得,我等会儿去试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX