selenium
- 概述
- 思路分析
- 1. 登录淘宝网
- 2. 输入用户名和密码
- 3. 访问购物车
- 4. 提交订单并确认支付
- 完整代码
概述
每当双十一等购物节到来的时候,我们经常需要熬夜到凌晨来对心仪的商品进行抢购。那么,有没有一种可以避免我们熬夜却可以清空购物车的方法呢?今天我就给大家提供一种思路,即使用python+selenium爬虫技术实现淘宝购物车的清空。
思路分析
1. 登录淘宝网
登录淘宝网的网址为https://login.taobao.com/,因此我们首先应该使用selenuim模块对此网址进行访问,这里以chrome浏览器为例。为了防止被淘宝网检测出,我们需要进行相关设置来规避检测。
from selenium import webdriver
from selenium.webdriver import ChromeOptions # 实现规避检测
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
bro = webdriver.Chrome('./chromedriver.exe', options=options)
bro.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
bro.get('https://login.taobao.com')
2. 输入用户名和密码
在登陆之前,我们需要获取登录的用户名和登录密码。然后通过通过浏览器“检查”的方式,定位到输入用户名和密码的文本框,以及登录的按钮。
# 需要登录,输入用户名和密码
input_button = self.bro.find_element_by_name('fm-login-id')
input_button.send_keys(self.account)
passwd_button = self.bro.find_element_by_name('fm-login-password')
passwd_button.send_keys(self.password)
login_button = self.bro.find_element_by_css_selector('.fm-button')
login_button.click()
3. 访问购物车
在登陆以后,我们的目的是清空购物车,因此我们需要访问购物车。默认我们清空购物车,所以购物车里面多余的商品请先暂时清理掉。如果购物车是空的,则无法清空,因此需要设置异常处理机制。
bro.get('https://cart.taobao.com/cart.htm?t=1624499530235')
try:
choose_all = self.bro.find_element_by_css_selector('.select-all')
choose_all.click()
except:
print("购物车是空的,请添加商品到购物车后重试!")
bro.quit()
4. 提交订单并确认支付
进入提交环节,我们首先点击提价订单按钮,接着确认支付,输入支付密码,最后再次提交即可。最后使用的电脑是常用机器,否则可能会出现多余的安全验证环节。
# 提交订单
submit_btn = self.bro.find_element_by_id('J_Go')
submit_btn.click()
# 确认支付
go_btn = self.bro.find_element_by_css_selector('.go-btn')
go_btn.click()
# 输入支付密码
input_passwd_btn = bro.find_element_by_css_selector('.sixDigitPassword')
input_passwd_btn.send_keys(self.payment_password)
confirm_btn = self.bro.find_element_by_css_selector('.ui-button')
confirm_btn.click()
bro.quit()
完整代码
from selenium import webdriver
from time import sleep
from selenium.webdriver import ChromeOptions # 实现规避检测
import datetime as dt
class ShopTaobao(object):
def __init__(self, account, password, payment_password):
# 实现selenium规避被检测的风险
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
self.bro = webdriver.Chrome('./chromedriver.exe', options=options)
self.bro.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
self.account = account
self.password = password
self.payment_password = payment_password
self.bro.maximize_window()
def login(self):
self.bro.get('https://login.taobao.com')
# 需要登录,输入用户名和密码
input_button = self.bro.find_element_by_name('fm-login-id')
input_button.send_keys(self.account)
passwd_button = self.bro.find_element_by_name('fm-login-password')
passwd_button.send_keys(self.password)
login_button = self.bro.find_element_by_css_selector('.fm-button')
login_button.click()
sleep(1)
# 进入购物车,全选所有的商品
self.bro.get('https://cart.taobao.com/)
try:
choose_all = self.bro.find_element_by_css_selector('.select-all')
choose_all.click()
sleep(2)
except:
print("购物车是空的,请添加商品到购物车后重试!")
self.bro.quit()
def submit(self):
# 提交订单
submit_btn = self.bro.find_element_by_id('J_Go')
submit_btn.click()
sleep(3)
# 确认支付
go_btn = self.bro.find_element_by_css_selector('.go-btn')
go_btn.click()
sleep(3)
# 输入支付密码
input_passwd_btn = self.bro.find_element_by_css_selector('.sixDigitPassword')
input_passwd_btn.send_keys(self.payment_password)
confirm_btn = self.bro.find_element_by_css_selector('.ui-button')
confirm_btn.click()
sleep(10)
self.bro.quit()
if __name__ == '__main__':
# 设置执行时间
target_time = '2021-11-10 23:59:59'
while True:
if dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S') == target_time:
try:
shop = ShopTaobao('淘宝账户', '淘宝账户密码', '支付宝支付密码')
# 登录淘宝
shop.login()
# 提交订单
shop.submit()
finally:
print("提交订单完毕,请检查您的购物车是否已被清空!")
break