import time import json import os from functools import partial from selenium import webdriver from concurrent.futures import ThreadPoolExecutor, as_completed def get_cookies(): """ 获取cookies保存至本地 """ browser = webdriver.Firefox() log_url = 'https://www.yuketang.cn/web' browser.get(log_url) time.sleep(15) # 进行扫码 dictCookies = browser.get_cookies() # 获取list的cookies jsonCookies = json.dumps(dictCookies) # 转换成字符串保存 with open('cookies.txt', 'w') as f: f.write(jsonCookies) print('cookies保存成功!') def login(driver, url): driver.get(url) time.sleep(10) # 2 account_login_button = driver.find_element_by_xpath( '/html/body/div[4]/div[2]/div/div[2]/div/div/div/section[2]/div/div/div[2]/div/xt-wrap/xt-controls/xt-inner/xt-playbutton') account_login_button.click() time.sleep(500) title = driver.title print(title) driver.quit() return title def browser_initial(): """" 浏览器初始化,并打开大麦网购票界面(未登录状态) """ options = webdriver.FirefoxOptions() # options.add_argument("--headless") # 设置火狐为headless无界面模式 # options.add_argument("--disable-gpu") browser = webdriver.Firefox(options=options) browser.get( 'https://www.yuketang.cn/web') # 从本地读取cookies并刷新页面,成为已登录状态 with open('./cookies.txt', 'r', encoding='utf8') as f: listCookies = json.loads(f.read()) # 往browser里添加cookies for cookie in listCookies: cookie_dict = { 'domain': 'www.yuketang.cn', 'name': cookie.get('name'), 'value': cookie.get('value'), 'sessionid': cookie.get('value'), "expires": '', 'path': '/', 'httpOnly': False, 'HostOnly': False, 'Secure': False, 'sameSite': 'None' } browser.add_cookie(cookie_dict) browser.refresh() # 刷新网页,cookies才成功 return browser if __name__ == '__main__': # 存储COOKIES 首次运行先运行这两句 if not os.path.exists('cookies.txt'): get_cookies() browser = browser_initial() # 上面两句运行完毕后即可运行下面两句 start = 12449817 # 视频起始编号 end = 12449820 # 视频结束编号74 urls = [ f'https://www.yuketang.cn/v2/web/xcloud/video-student/7698212/{index}' for index in range(start, end) ] print(urls) #partial固定参数 part = partial(login,browser=browser) with ThreadPoolExecutor() as pool: results=pool.map(part,urls) for result in results: print(result)