本次目標
- 面向對象編程
- selenium 操作瀏覽器
- pickle 保存和讀取Cookie實現免登陸
- time 做延時操作
- os 創建文件,判斷文件是否存在
selenium >>> pip install selenium==3.4.1
- 版 本:anaconda(python3.8.8)
- 編輯器:pycharm
from selenium import webdriver # 操作谷歌瀏覽器 需要額外安裝的 並且現在安裝這個模塊得指定版本 3.4 from time import sleep import pickle # 保存和讀取cookie實現免登錄的工具 import os # 操作文件的模塊
# 大麥網主頁 damai_url = 'https://www.damai.cn/' # 登陸 login_url = 'https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F' # 搶票目標頁面 target_url = 'https://detail.damai.cn/item.htm?id=610820299671'
class Concert: # 完成一個初始化 def __init__(self): self.status = 0 # 狀態碼, 表示當前操作執行到了哪個步驟 self.login_method = 1 # {0: 模擬登陸, 1: 免登錄} self.driver = webdriver.Chrome(executable_path='chromedriver.exe')
第一次登陸的時候,會幫助我記錄我們的登陸信息
登陸成功之后 cookie會發生變化
def set_cookies(self): self.driver.get(damai_url) # 打開大麥網主頁 print("###請點擊登陸###") # 如果說我一直沒有點擊登陸? 我是不是這個程序就停在這里了 while self.driver.title.find('大麥網-全球演出賽事官方購票平台') != -1: sleep(1) # 程序休眠 print("###掃碼成功###") pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb')) # 保存cookie print('###cookie保存成功###') self.driver.get(target_url)
假如我現在已經登陸過了,那么直接拿本地的登陸信息,直接登陸就可以了
def get_cookie(self): cookies = pickle.load(open('cookies.pkl', 'rb')) for cookie in cookies: cookie_dict = { 'domain': '.damai.cn', 'name': cookie.get('name'), 'value': cookie.get('value') } self.driver.add_cookie(cookie_dict) print('###載入cookie###')
def login(self): if self.login_method == 0: self.driver.get(login_url) # 跳轉到登陸界面登陸一下 print('###開始登陸###') elif self.login_method == 1: # 如果我本地沒有cookies.pkl文件 if not os.path.exists('cookies.pkl'): self.set_cookies() # 沒有文件的情況下, 再次登陸一下 else: self.driver.get(target_url) # 跳轉到搶票頁面 self.get_cookie() # 登陸信息載入瀏覽器
調用登陸,並且刷新頁面,改變登陸成功的標識
def enter_concert(self): print('###打開瀏覽器, 進入大麥網###') # 調用登陸 self.login() self.driver.refresh() self.status = 2 print('###登陸成功###')
if __name__ == '__main__': con = Concert() con.enter_concert()