618快到了,如何快读秒到心仪商品
首先需要配置python环境,本文选择简单又好用的anaconda开发环境,下载地址:https://www.anaconda.com/
下载完后傻瓜式下一步安装即可
安装完成后运行Jupyter Notebook即可打开python编程环境。
开发之前咱们还需要安装一个模块叫做Selenium。这个模块是以一个仿真操作网页的库。可以非常快速的开发网页程序。
下载需要用pip安装,首先打开安装需要的命令符环境
pip install selenium
由于我已经安装好了,所以提示我requirement already satisfied
Selenium安装好之后,需要配合相应浏览器使用,本文选用Chrome浏览器
之后需要下载ChromeDriver驱动。下图为chrome版本号对应的驱动型号。
国内驱动库下载地址:
http://chromedriver.storage.googleapis.com/index.html
下面开始创建python3程序
创建成功后可以改名字并且将代码敲入下方:
手下需要引入库文件,就像插件一样,python3本身功能有限,想要快速开发必须有一些快捷的插件。下面代码引入了selenium的部分插件
from selenium import webdriverimport datetimefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
之后想要试验浏览器驱动成功没有执行下面代码
browser = webdriver.Chrome()
如果系统弹出了chrome浏览器,则表明成功一半了。
下面开始解释秒杀的基本代码:
上面的代码已经定义了打开浏览器的变量browser,那么后面想执行浏览器界面的操作都得围绕着这个变量来。这个变量集成了webdriver的功能。
那么webdriver哪里来的呢,在我们文件开始我们写了一个
from selenium import webdriver
实际上就是导入selenuim的webdriver功能
下面我们开始用我们生成的brower(继承了webdriver的功能)的get功能
get可以打开我们想要的页面。
browser.get("https://www.taobao.com")browser.find_element_by_link_text("亲,请登录").click()
find_element_by_link_text:
要想解释这句的功能我们需要打开浏览器,按F12
我们找到全选对应的id
对应的id号为J_SelectAll1
browser.find_element_by_id("J_SelectAll1").click()browser.find_element_by_link_text("结 算").click()browser.find_element_by_link_text('提交订单').click()
之后我们执行代码find_element_by_id,就是寻找这个ID的按钮然后click点击
之后我们还要寻找结算和提交订单两个按钮,这样才能完成整个下单动作。
find_element_by_link_text
这条语句就是按照链接文本寻找按钮
我们发现是结空格算。
以上就实现了整个下单过程。但是只能手动点击运行。做不到过了0点自动下单。所以我们就需要程序调整时间了
import datetimenow = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
第一句是导入时间相关的库文件
第二句是获取现在的时间
我们把程序打印出来看看效果
获取了一个十分精确的时间
以上代码组合一下再加上一定的逻辑就可以实现我们秒杀的功能了,下面加入一些代码将功能写完整
def miaosha(times):
def是python的函数定义字符,表明现在写的是个函数,python没有{}所以写的过程中空格很重要。
miaosha是我们的函数名字,可以自己改,times是指定时间。可以使2020-06-16 0:0:0开始
while True:
无限循环
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
获取当前时间
if now > times:
如果一过0点,也就是当前时间比我们定义的时间大了则
while True:
继续循环,因为秒杀要不断的刷新页面
try:
字面理解就是试试,一般程序一旦错误就停止了,但是try不会,错了就不执行执行下面的。
if browser.find_element_by_link_text("结 算"):
由于加载界面不一定能加载完,所以这里我们放了个if,如果找到结算这个按钮就继续,找不到继续加载界面。这样避免网页延迟加载不出来的情况。
browser.find_element_by_link_text("结 算").click()print(f"结算成功,准备提交订单")
第一句之前说过点击结算按钮,第二个是打印,因为咱们也不知道电脑到底下没下单,也不敢问呀!所以让它自己说,print就是一个显示功能函数 如果执行完下单后则显示我们想要的字符串。
break
while true是无限循环。要跳出循环就得用break
结算还没完,得提交订单
while True: try: if browser.find_element_by_link_text('提交订单'): browser.find_element_by_link_text('提交订单').click() print("抢购成功") time.sleep(0.01)
一样的套路。提交订单部分商品的秒杀基本上搞定了。可以说是毫秒级秒杀也不为过,但是还要看咱们网速的快慢,毕竟要架在界面么。浏览器得能看到结算按钮才行。对了最后一句 time.sleep(0.01)意思是延迟0.01秒的意思。不能太快了,要给别人点机会。当然如果没有这句的话电脑将会以最快速度点击提交订单。
推荐三本python网络编程的图书,可以爬取各种网络数据。