目标分析:

大家都有很多需要在淘宝抢购、秒拍的商品,蛮长地等待时间到来并人肉抢商品,总是一件令人烦躁的事情。而github上许多优秀的开源代码,都声称可以自动化完成指定商品抢购,然而当真的运行这些程序时候,就会发现各种各样的小坑需要踩,本文就是想总结一下最近使用此类程序发现的问题,希望能裨补缺漏、有所广益。本人亲测可以正常运行,淘宝也不会检测出正在用机器抢购商品。

原始项目:

https://github.com/Jesseslco/taobao_auto_buy/tree/alpha

这个原始项目是我从众多淘宝自动下单开源程序中,感觉代码最优雅,可扩展性比较好的程序,但是在实际使用过程中,却发现它连基本的订购一个不需要抢购的商品都做不到,下面记录一下我的排错日志。

解决方案:

1. 添加实验性功能参数

现在不少大网站有对selenium采取了监测机制。比如正常情况下我们用浏览器访问淘宝等网站的 window.navigator.webdriver的值为undefined。而使用selenium访问则该值为true,我们需要添加如下的option。

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptionsopts = ChromeOptions()
opts.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加载图片,加快访问速度
opts.add_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
driver = Chrome(options=option)

2. 添加字段清除程序

只采用上述代码是不够的,实测还是会被阿里检测机制探测到。所以我们在每个网页刚刚打开,还没有运行网页的脚本前,运行下面给定的脚本。

from selenium.webdriver import Chromedriver = Chrome('./chromedriver')
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""
})
driver.get('http://baidu.com')

需要特别注意的是,只要出现了打开新的网页或者刷新旧网页事件,我们就需要加一段这样的代码在最前面,比如:

self._browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})  self._browser.switch_to.window(self._browser.window_handles[1])
def _click_until_redirect(self, element, current_url):self._browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})    while current_url == self._browser.current_url:try:element.click()except:continue

3. 通过上述手段,基本旧不会被检测到用了selenium,该代码还有一个坑,也就是chrome drive 版本要和电脑的chrome版本一致。

这里有个宝藏网址,可以下载各种版本。

4. 另外就是如果抢购紧俏物品,最好加一个毫秒级别的定时功能,偷偷告诉你,抢购某超市上面的53度茅台,应该提前750ms左右运行程序。

def _timer(self, buy_time):buy_time_raw = datetime.strptime(buy_time, "%Y-%m-%d %H:%M:%S:%f")print(buy_time_raw)while datetime.now() < buy_time_raw:self._timer_printer(buy_time_raw)

5. 此时这个框架还不够快,建议修改一下代码逻辑,具体来说:

首先,通过手工的方式把要抢购的物品加入购物车;

然后,清洗一下代码,让程序直接进入你的购物车,到点直接提交需求,把buy函数稍微修改一下,就变成了购物车模式,要注意config里面打开的链接,也要换成你购物车的url。

def _buy(self):self._logger.info("正在倒计时")self._timer(self._buy_time)self._logger.info("开始抢购")sumit_element = WebDriverWait(self._browser, 300, self.delta).until(EC.element_to_be_clickable((By.ID, "J_Go")))self._click_until_redirect(sumit_element, self._browser.current_url)self._logger.info(sumit_element)
#checkout_element = WebDriverWait(self._browser, 300, self.delta).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='submitOrderPC_1']//a[@class='go-btn']")))self._logger.info(checkout_element)self._click_until_redirect(checkout_element, self._browser.current_url)self._logger.info("抢购结束")

好,谢谢各位朋友,各位朋友耗子尾汁,早日抢到心怡的商品。

【2020年11月】研读和改进淘宝自动下单程序相关推荐

  1. selenium自动化之登录淘宝自动下单案例

    谷歌浏览器输入:chrome://version/ 查看浏览器版本 进入 https://npm.taobao.org/mirrors/chromedriver 下载对应浏览器版本的chromedri ...

  2. 2020 年 11 月程序员工资统计,Java 市场占有率仍第一

    如果问你最成功的和最流行的编程语言是什么?你肯定回答 Java. 2020 年 11 月 中国大陆编程语言排行显示,Java 程序员招聘需求达 13 万人,占27.8%,市场占有率位居第一. 图片来源 ...

  3. 2020年11月编程排行出炉,Java市场占有率仍第一

    如果问你最成功的和最流行的编程语言是什么?你肯定回答 Java. 2020 年 11 月 中国大陆编程语言排行显示,Java 程序员招聘需求达 13 万人,占27.8%,市场占有率位居第一. 图片来源 ...

  4. mysql 按月和年累加_广西柳州市市场监管局公布市2020年11月(第一批)电梯按需维保试点名单...

    中国质量新闻网讯 根据<柳州市改进电梯维护保养模式试点工作方案>,近日,广西柳州市市场监管局公布柳州市首批按需维保试点电梯名单,冠亚蓝湾国际小区和南庆安置小区共46台电梯成为首批试点电梯, ...

  5. Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化

    Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化 目录 利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化 Bar( ...

  6. 【数据竞赛】2020年11月国内大数据竞赛信息-奖池5000万

    2020年11月:下面是截止到2020年11月国内还在进行中的大数据比赛题目,非常丰富,大家选择性参加,初学者可以作为入门练手,大佬收割奖金,平时项目不多的,比赛是知识非常好的实践方式,本号会定期发布 ...

  7. gre biochemistry_【备考精选】2020年11月6日GRE写作Issue预测分享

    2020年11月02日15:14来源:小站教育作者:小站GRE编辑 参与(0)阅读(47) 摘要:本文着眼于2020年11月6日GRE考试,为各位同学带来写作Issue预测,同时附带权威解析和参考提纲 ...

  8. 10年老电脑如何提速_电信宽带免费提速至200M,面向全国用户活动日期2020年11月9日至12月31日...

    近日中国电信免费提速活动,也是为了大家方便剁手吧! 2020年11月9日至12月31日,针对接入速率200Mbps以下的电信光纤宽带家庭用户,中国电信推出免费在线提速到200Mbps的优惠活动:针对接 ...

  9. 通渭县义岗川镇之行(2020年11月19日)

    2020年11月18日,应邀前往通渭县义岗川镇老家,经过了3个小时的自驾车程,夜幕降临时刻到达了美丽的义岗川小镇. 义岗川镇,隶属甘肃省定西市通渭县,地处通渭县城最北部,东南与寺子川乡毗连,南邻北城铺 ...

最新文章

  1. 油猴脚本第一家,网页网盘链接实时判断+资源搜索网站导航,资源重度患者的福利...
  2. 中国开封菊花花会照片1
  3. hexo的landfarz主题侧栏靠左
  4. 谷歌开源BoTNet | CNN与Transformer结合!Bottleneck Transformers for Visual Recognition!CNN+Transformer!
  5. oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...
  6. 保时捷服务器连接不到车辆信息,检修保时捷老款卡宴无法启动故障
  7. php环境模拟stphp_一个模拟浏览器请求的php类,模拟请求ua设置
  8. RobotFramework安装扩展库包autoitlibrary(四)
  9. Unity3d Material(材质) 无缝拼接
  10. 网络创新激活西部科技,戴尔2013软件定义网络圆桌会谈的启示
  11. matlab的机器学习工具箱在哪,[matlab]机器学习及SVM工具箱学习笔记
  12. 北京大学深圳研究生院计算机应用技术,北京大学计算机应用技术考研经验-北大深圳研究生院考研辅导班...
  13. 深刻理解Binder机制
  14. python字典的存储结构_Python 字典的存储结构
  15. Windows10制作双系统来越狱 ios13.3.1(非常方便,不要U盘)
  16. 素材要VIP咋整?看python大展神通
  17. 什么是多态?为什么用多态?有什么好处?[转]
  18. 正则中$1、$2的应用--日期格式化
  19. 互联网的那点事:商业模式、开放平台、开放开源标准
  20. Windows用户密码的加密方法与破解

热门文章

  1. elasticsearch-es search 查询
  2. 我们能从后验分布中学到什么?贝叶斯后验的频率解释
  3. oracle设置组合主键,Oracle主键的设置
  4. 应用于客户端的性能测试指标
  5. 机器学习-线性模型及广义线性模型
  6. autoCAD数据库读写
  7. Android中的四大组件
  8. 【C语言函数递归】递归计算最大公约数
  9. github标准pull request提交流程
  10. php 编码转换 乱码解决