原理

利用chromedriver来驱动chrome进行各种模拟各种行为操作, 然后利用selenium提供的接口来操作chromedriver.

安装ChromeDriver

当然这个的默认前提是你已经安装了Chrome.

下载

下载地址: http://chromedriver.chromium.org/ , 如果国内有被墙的情况请自行解决, 其次最重要的一点是版本, 一定要下载与自己浏览器想对应的版本.

安装

下载下来的直接就是一个驱动, 其实不存在安装的问题, 只需要解压出来就行, 但是需要添加环境变量. 所以我选在将其拷贝放入已经在环境变量的目录中: /usr/local/bin/.

网上说需要给他执行权限(实际我没有做一步操作):

sudo chmod u+x,o+x   /usr/local/bin/chromedriver

编程

原理很简单, 就是把购物的几步操作用代码来实现, 依次是登陆、购物车选中、购买.

from selenium import webdriver
import datetime
import time # 登陆淘宝
def login():
browser.get("https://www.taobao.com")
time.sleep(3)
if browser.find_element_by_link_text("亲,请登录"):
browser.find_element_by_link_text("亲,请登录").click()
print(f"请尽快扫码登录")
time.sleep(10) # 勾选购物车
def picking(method):
browser.get("https://cart.taobao.com/cart.htm")
time.sleep(3) if method == 0:
while True:
try:
if browser.find_element_by_id("J_SelectAll1"):
browser.find_element_by_id("J_SelectAll1").click()
break
except:
print(f"找不到购买按钮")
else:
print(f"请手动勾选需要购买的商品")
time.sleep(5) def buy(times):
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 对比时间,时间到的话就点击结算
if now > times:
# 点击结算按钮
while True:
try:
if browser.find_element_by_link_text("结 算"):
browser.find_element_by_link_text("结 算").click()
print(f"结算成功,准备提交订单")
break
except:
pass
# 点击提交订单按钮
while True:
try:
if browser.find_element_by_link_text('提交订单'):
browser.find_element_by_link_text('提交订单').click()
print(f"抢购成功,请尽快付款")
except:
print(f"再次尝试提交订单")
time.sleep(0.01) if __name__ == "__main__":
# 请指定勾选购物车商品的方式
# 0代表,自动勾选购物车内的全部商品。注意:若购物车中存在失效商品时无法进行全选,请勿使用此项
# 1代表,手动勾选购物车内的商品
method = 1 # 请指定抢购时间,时间格式:"2019-06-01 10:08:00.000"
times = "2019-06-04 08:35:00.000" # 自动打开Chrome浏览器
browser = webdriver.Chrome()
# 设置浏览器最大化显示
browser.maximize_window() # 扫码登录淘宝
login()
# 勾选准备结算的商品
picking(method)
# 等待抢购时间,定时秒杀
buy(times)

代码我已经开源在我的Gitee: https://gitee.com/jerryqi/python-practice

最新文章

  1. Vue.js简单实践
  2. IP分片详解
  3. ASP.NET MVC 防止 CSRF 的方法
  4. 遇到 Line 21: StartTag: invalid element name ios
  5. MAC按键以及快捷键
  6. Git简记
  7. 学习了ZKW费用流
  8. 调试 rewrite
  9. jmeter 构建一个数据库测试计划
  10. 利用百度API(js),通过地址获取经纬度的注意事项
  11. python learn note1
  12. 两个列表lst1和lst2,计算两个列表的公共元素和非公共元素
  13. JavaScript中冒泡与事件委托
  14. HDU 6249 Alice’s Stamps(dp)
  15. Myeclipse项目中Source、Projects、Libraries、Order and export含义
  16. nginx_upstream_check_module监控后端服务器http
  17. 未能加载文件或程序集”xxxx”或它的某一个依赖项,试图加载格式不正确的程序。
  18. mvn打war包以及解压包的方法
  19. 鸟哥的私房菜:Bash shell(二)-变量的丰富功能
  20. 20145326 《Java程序设计》第5周学习总结

热门文章

  1. sql语句之where与having的区别
  2. Java之ClassLoader基础知识
  3. mac 安装cmake
  4. Java SpringBoot注解方式开启异步支持
  5. jquery中$.get()如何让跨域请求携带cookie?
  6. mysql忘记密码恢复
  7. ES6中的class类的理解
  8. Linux下CRMEB环境搭建
  9. 基因表达半衰期 | mRNA Half-Life
  10. [转][linux][centos]嵌入式 Linux下编译并使用curl静态库