通过selenium库请求拿到目标网站的cookie,然后用cookie去请求目标网站,可以省略登陆操作
以微博为例,先获取登陆的cookie:
1 import time 2 import json 3 from selenium import webdriver 4 from selenium.webdriver.support.ui import WebDriverWait 5 from selenium.webdriver.support import expected_conditions as ec 6 from selenium.webdriver.common.by import By 7 8 9 def save_cookie(the_cookie): # 直接将获取的cookie保存到json文件 10 with open(\'sina_cookie.txt\', \'w\') as f: 11 json.dump(the_cookie, f) 12 13 14 def save_cookies(the_cookies): # 传入的数据是 :将获取到的cookie用字典保存它的 name 和 value 15 with open(\'sina_cookies.txt\', \'w\') as f: 16 f.write(json.dumps(the_cookies)) 17 18 19 driver = webdriver.Chrome() 20 driver.get(\'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F\') 21 driver.maximize_window() 22 23 WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.XPATH, \'//*[@id="loginName"]\'))) 24 25 try: 26 username = driver.find_element_by_xpath(\'//*[@id="loginName"]\') 27 username.clear() 28 username.send_keys(\'用户名\') 29 time.sleep(1.3) 30 pwd = driver.find_element_by_xpath(\'//*[@id="loginPassword"]\') 31 pwd.clear() 32 pwd.send_keys(\'密码\') 33 time.sleep(2) 34 driver.find_element_by_xpath(\'//*[@id="loginAction"]\').click() 35 WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.XPATH, \'//p[@data-node="title"]\'))) 36 print(driver.find_element_by_xpath(\'//p[@data-node="title"]\')) 37 38 cookie = driver.get_cookies() 39 cookies = {} 40 for item in cookie: 41 cookies[item.get(\'name\')] = item.get(\'value\') 42 save_cookie(cookie) 43 print(\'cookie:\n\', cookie) 44 save_cookies(cookies) 45 print(\'cookies:\n\', cookies) 46 except Exception as e: 47 print(e) 48 pass 49 finally: 50 driver.close()
使用requests请求时带上cookie,可以直接登陆首页而不需要设置登陆操作。这里可能出问题,可以采用:
在请求之前一定要先请求一下目标网站。
1 import json 2 import requests 3 4 with open(\'sina_cookies.txt\') as f: 5 cookies = json.load(f) 6 print(cookies) 7 8 url = \'https://weibo.cn\' 9 result = requests.get(url, cookies=cookies) 10 print(result.text) 11 if \'用户名\' in result.text: 12 print(\'cookie调试成功\')
这里要注意的是我们drvier.get_cookies()获取到的cookie信息是如下的形式: