python+selenium实现自动化购买故宫门票
简单的一个自动买票代码,仅供学习交流。
代码并未完全给出,只给出主要逻辑。
登录个人账号
driver.get("https://gugong.ktmtech.cn/")
time.sleep(2)
driver.find_element_by_link_text("登录").click()
IDCardNo = driver.find_element_by_id("IDCardNo")
IDCardNo.send_keys("账号")
txbCheckCode = driver.find_element_by_id("txbCheckCode")
txbCheckCode.send_keys("密码")
driver.find_element_by_id("Login").click()
time.sleep(2)
还有一种替代登录的方法,使用cookie直接登录
首先获取cookie
def get_cookies(self):
# 获取cookies保存至本地
self.browser.get(self.log_url)
while 1:
try:
#判断是否登录,如果登录退出循环。
if self.browser.find_element_by_xpath('//*[@id="mCommonMy"]/div/img'):
break
except:
print('请尽快登录!')
time.sleep(10) # 等待登录
dictCookies = self.browser.get_cookies()
jsonCookies = json.dumps(dictCookies) # 转换成字符串保存
# 写入jd_cookies.txt
with open('jd_cookies.txt', 'w', encoding='utf-8') as f:
f.write(jsonCookies)
print('cookie保存成功!关闭浏览器')
self.browser.close()
'
运行运行
在登录时加入cookie信息。
#给浏览器增加cookie,并刷新浏览器起到登录作用
def login(self):
self.browser.get(self.url)
print('登录中预计需要10秒左右请稍等...')
with open('jd_cookies.txt', 'r', encoding='utf-8') as f:
jd_cookies = f.readlines()
for cookie in jd_cookies:
cookie = cookie.replace(r'\n', '')
cookie_li = json.loads(cookie)
time.sleep(3)
for cookie in cookie_li:
self.browser.add_cookie(cookie)
time.sleep(1)
num=0
while 1:
self.browser.refresh() # 刷新浏览器
time.sleep(2)
try:
# 判断是否登录,如果登录退出循环。
if self.browser.find_element_by_xpath('//*[@id="mCommonMy"]/div/img'):
print("登录成功!准备进入购物车.")
break
except:
print('检查尚未登录,继续刷新')
num+=1
time.sleep(1)
if num>=20:
print("刷新超过%d次,程序结束请检查问题,或者重新运行一次!"%num)
sys.exit()#结束程序
time.sleep(3)
设置刷新时间,并给出登录信息。
driver.get("https://gugong.ktmtech.cn/OrderSingle/SelectDate/?date=2021-05-02&amorpm=0")#直接通过url到达指定日期
while True:
try:
while (~driver.find_element_by_name("InUserNo")):
driver.get("https://gugong.ktmtech.cn/OrderSingle/SelectDate/?date=2021-05-02&amorpm=0")
time.sleep(0.01) #刷新时间
break
except:
userId = driver.find_element_by_name("InUserNo")
userId.send_keys("身份证号")
userName = driver.find_element_by_name("InUserName")
userName.send_keys("姓名")
driver.find_element_by_name("addData").click()
userId = driver.find_element_by_name("InUserNo")
userId.send_keys("第二个身份证号")
userName = driver.find_element_by_name("InUserName")
userName.send_keys("第二个姓名")
driver.find_element_by_name("addData").click()
driver.find_element_by_id("next").click()
break
当然我也有比自动化还要使用的自己编写的脚本