解决selenium设置cookie的问题

解决selenium设置cookie的问题

  • 问题描述
  • 代码

问题描述

在刷wechall的题的时候,一个题需要用到爬虫,需要保持会话状态,当然使用requests库的话,相对简单,但是想尝试一下selenium库。但是在使用的过程中会遇到有很多问题,导致cookie设置失败,下面直接上带cookie登录的代码来说明。希望能帮到有同样需求的小伙伴。(第一次写博客,一些问题可能描述不清或者没找到关键所在,只是单纯的绕过去或者碰巧解决了,欢迎大佬们指正~)

代码

# -*- coding: UTF-8 -*-
from selenium import webdriver
import sys
import importlib
import urllib.parse
importlib.reload(sys)
# 1.用于将cookie字符串转换为对象,因为后面add_cookie需要传字典进去
def ParseCookiestr(cookie_str):
    cookielist = []
    for item in cookie_str.split(';'):
        cookie={}
        itemname=item.split('=')[0]
        iremvalue=item.split('=')[1]
        cookie['name']=itemname
        cookie['value']=urllib.parse.unquote(iremvalue)
        cookielist.append(cookie)
    return cookielist

if __name__ == '__main__':
    url='http://www.wechall.net/challenge/training/programming1/index.php?action=request'
    # 参数为文本形式的cookie,如:WC=yourwccookie
    cookie_str=sys.argv[1]
    cookielist=ParseCookiestr(cookie_str)
    driver = webdriver.Chrome()       # 打开 Chrome 浏览器
    driver.set_page_load_timeout(5000)    # 防止页面加载个没完
    # 2.需要先获取一下url,不然使用add_cookie会报错,这里有点奇怪
    driver.get(url)

    for i in cookielist:
        cookie = {}
        # 3.对于使用add_cookie来说,参考其函数源码注释,需要有name,value字段来表示一条cookie,有点生硬
        cookie['name'] = i['name']
        cookie['value']=i['value']
        # 4.这里需要先删掉之前那次访问时的同名cookie,不然自己设置的cookie会失效
        driver.delete_cookie(i['name'])
        # 添加自己的cookie
        driver.add_cookie(cookie)

    try:
        driver.get(url)  # 再次打开爬取页面
        print(driver.get_cookies()) # 打印设置成功的cookie
    except:
        print("ERROR")

你可能感兴趣的:(wechall)