python+selenium实现淘宝商品秒杀(新手上路,轻点喷。2020.7.23)
抢购鞋子,发现那些人下手太快,于是有了自己写一个抢购代码的想法,经过几个小时的折腾,算是拼凑出一个简单的抢购程序。
发个博客,记录一下身为初学者在生活中第一次使用python的经历。
实现功能
在csdn上搜索“淘宝+selenium"有很多大佬给出各式各样的代码,但是没有找到完全适用于目前抢购形式的代码。身为代码的搬运工,我所能做的就是将大佬们的代码进行拼凑,最终代码实现如下功能:
- 实现自动登录 ;
- 设定时间进行页面刷新 ;
- 页面显示能够秒杀时进行购买 ;
- 购买成功后及时提交订单 ;
具体代码
初始化代码
options = webdriver.ChromeOptions()
# 不加载图片,加快访问速度
#options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
options.add_experimental_option('excludeSwitches', ['enable-automation'])
dir_path=os.getcwd()+'\chromedriver.exe'
print(dir_path)
sys.path.append(os.getcwd())
driver= webdriver.Chrome(executable_path=dir_path, options=options)
登录代码
def login(user_name,user_password,address):
# 打开淘宝登录页,自动登录
driver.get("https://www.taobao.com")
time.sleep(2)
if driver.find_element_by_link_text("亲,请登录"):
driver.find_element_by_link_text("亲,请登录").click()
#账户名
user = driver.find_element_by_id("fm-login-id")
user.send_keys(user_name)
#账户密码
password = driver.find_element_by_id("fm-login-password")
password.send_keys(user_password)
#滑块滑动
iframe = driver.find_element_by_xpath('//iframe') # 找到“嵌套”的iframe
driver.switch_to.frame(iframe)
sli_ele = driver.find_element_by_id("nc_1_n1z")
action = ActionChains(driver)
action.click_and_hold(sli_ele).perform()
action.move_by_offset(300, 0).perform()
time.sleep(2)
driver.switch_to.default_content()
driver.find_element_by_xpath('//div[@class ="fm-btn"]/button').click()
time.sleep(3)
# 这里写你需要抢购商品的链接地址
driver.get(address)
time.sleep(1)
购买代码
def buy(buytime):
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
if now >= buytime:
try:
if driver.find_element_by_link_text("立即购买"):
driver.find_element_by_link_text("立即购买").click()
break
except:
driver.refresh()
time.sleep(0.0001)
2020年7月4日功能更新
添加弹窗自己输入相关信息,使用pyinstaller将程序打包成.exe文件。该项目实践目前就到这了,有时间再继续完善。
app = Tk()
app.withdraw()
user_name = askstring(title="此应用仅供学习交流,不用于商业用途", prompt="请输入您的个人淘宝账号")
user_password = askstring(title="此应用仅供学习交流,不用于商业用途", prompt="请输入您的个人淘宝密码")
app.destroy()
这段支付宝密码输入代码没有进行测试,感兴趣的可以尝试一下。
while True:
try:
if driver.find_element_by_id("payPassword_rsainput"):
driver.find_element_by_id("payPassword_rsainput").send_keys(pay_password)
print("密码输入成功")
break
except:
time.sleep(0.0001)
暂时就这样吧
2020年8月6日更新
昨天晚上买东西试了试软件突然发现软件中用于实现淘宝登陆的滑块滑动功能无法使用总是报错导致软件无法登录,暂时没有好的解决方法进行解决,只能采用扫码登录的方法,虽然在过程中需要使用手机,但是这种方法稳定也省去了输入账号,密码的麻烦.
def login():
# 打开淘宝登录页,并进行扫码登录
driver.get("https://www.taobao.com")
time.sleep(3)
if driver.find_element_by_link_text("亲,请登录"):
driver.find_element_by_link_text("亲,请登录").click()
if driver.find_element_by_xpath('//i[@class ="iconfont icon-qrcode"]'):
driver.find_element_by_xpath('//i[@class ="iconfont icon-qrcode"]').click()
app = Tk()
app.withdraw()
showinfo('此应用仅供学习交流,不用于商业用途','请在10秒内扫码登录')
app.destroy()
time.sleep(10)
京东秒杀与淘宝类似,只是步骤不同
不同之处代码如下:
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
if now >= buytime:
print("时间到了")
try:
if driver.find_element_by_link_text("加入购物车"):
driver.find_element_by_link_text("加入购物车").click()
print("加入购物车成功")
break
except:
driver.refresh()
print("刷新")
time.sleep(0.0001)
while True:
try:
if driver.find_element_by_link_text("去购物车结算"):
driver.find_element_by_link_text("去购物车结算").click()
print("进入购物车成功,等待结算")
break
except:
time.sleep(0.0001)
while True:
try:
if driver.find_element_by_link_text("去结算"):
driver.find_element_by_link_text("去结算").click()
print("结算成功,等待支付")
break
except:
time.sleep(0.0001)
while True:
try:
if driver.find_element_by_id("quark-pw-result"):
driver.find_element_by_id("quark-pw-result").send_keys(pay_password)
print("密码输入成功")
break
except:
time.sleep(0.0001)
print("密码输入错误")
while True:
try:
if driver.find_element_by_link_text("提交订单"):
driver.find_element_by_link_text("提交订单").click()
print("确认付款成功,订单已完成")
break
except:
time.sleep(0.0001)