selenium+requests进行cookies保存读取操作
看这篇文章之前大家可以先看下我的上一篇文章:cookies详解
本篇我们就针对上一篇来说一下cookies的基本应用
使用selenium模拟登陆百度
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from PIL import Image
chrome_option = webdriver.ChromeOptions()
chrome_path = "/usr1/webdrivers/chromedriver"
def login_baidu():
driver = None
try:
driver = webdriver.Chrome(executable_path=chrome_path)
driver.get("https://www.baidu.com")
print(driver.title)
WebDriverWait(driver, 10, 0.5).until(EC.element_to_be_clickable((By.XPATH, //*[@id="u1"]/*[@class="lb"])))
element = driver.find_element_by_xpath(//*[@id="u1"]/a[7])
element.click()
WebDriverWait(driver, 10, 0.5).until(EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__PSP_10__footerULoginBtn"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__PSP_10__footerULoginBtn"])
element.click()
WebDriverWait(driver, 10, 0.5).until(EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__PSP_10__userName"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__PSP_10__userName"])
element.send_keys("账号")
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__PSP_10__password"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__PSP_10__password"])
element.send_keys(密码")
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__PSP_10__verifyCodeImg"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__PSP_10__verifyCodeImg"])
driver.get_screenshot_as_file("qrcode.png")
image = Image.open("qrcode.png")
left = element.location.get("x")
top = element.location.get("y")
right = left + element.size.get("width")
bottom = top + element.size.get("height")
cropImg = image.crop((left, top, right, bottom))
cropImg.save("code.png")
yanzheng = input(">>>")
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__PSP_10__verifyCode"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__PSP_10__verifyCode"])
element.send_keys(yanzheng)
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__PSP_10__submit"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__PSP_10__submit"])
element.click()
# 如果需要手机验证码
try:
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__36__button_send_mobile"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__36__button_send_mobile"])
element.click()
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__36__input_vcode"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__36__input_vcode"])
duanxin = input(">>>")
element.send_keys(duanxin)
WebDriverWait(driver, 10, 0.5).until(
EC.element_to_be_clickable((By.XPATH, //*[@id="TANGRAM__36__button_submit"])))
element = driver.find_element_by_xpath(//*[@id="TANGRAM__36__button_submit"])
element.click()
except Exception as e:
print(e)
driver.get_screenshot_as_file("screen.png")
finally:
print("关闭")
if driver:
driver.quit()
selenium操作很简单,这里不做详解讲解,以后我们开爬虫基础系列文章的时候会讲到。
selenium保存cookies
cookies = driver.get_cookies()
with open("cookies.txt", "w") as fp:
json.dump(cookies, fp)
这里切记,如果我们要使用json.load读取数据,那么一定要使用json.dump来写入数据,不能使用str(cookies)直接转为字元串进行保存,因为其存储格式不同。这样我们就将cookies保存在文件中了。
selenium读取cookies
def read_cookies():
# 设置cookies前必须访问一次百度的页面
driver.get("http://www.baidu.com")
with open("cookies.txt", "r") as fp:
cookies = json.load(fp)
for cookie in cookies:
# cookie.pop(domain) # 如果报domain无效的错误
driver.add_cookie(cookie)
driver.get("http://www.baidu.com")