cookie in selenium & 定时更新token

1.selenium添加cookie访问 需要登录才能访问的链接

selenium 访问 “https://developer.org.com”,如果没登陆,则跳转到"https://console.org.com/login",此时selenium取到的cookie的domain是:.console.org.com。

而domain 是 .console.org.com 去访问 “https://developer.org.com”,也是不匹配,访问失败,所以需要手动定义domain,可以取相同部分:.org.com。

def cookie_login_data():
    url = login_url
    payload = {
        "grant_type": "password",
        "username": user_password[0],
        "password": user_password[1],
        "client_id": "web_platform",
        "client_secret": "changeit"
    }
    res = requests.request("POST", url, json=payload)
    access_token = res.json().get("access_token")
    # selenium 访问 “https://developer.org.com”,如果没登陆,则跳转到"https://console.org.com/",此时的domain是:.console.org.com
    # domain是:.console.org.com 去访问 “https://developer.org.com”,也是不匹配,访问失败,所以domain取相同部分:.org.com
    # 需要传domain,否则cooke不会生效
    cookie = {'domain': domain, "name": "access_token", "value": access_token}
    return cookie

2.定时更新token

公司的cookie的token默认的有效期是1小时,如果爬虫的时间超过1小时后,1小时后的链接都会爬取失败,所以,需要判断执行时间超过一定阈值,则更新cookie的token

def refresh_driver_cookie(start_time, _driver):
    endtime = datetime.datetime.now()
    print("endtime",endtime)
    duringtime = endtime - start_time
    print("duringtime",duringtime.seconds)
    # token默认是1小时失效,设置如果运行了30分钟,则重新获取登录的token写入到selenium的cookie
    if duringtime.seconds > 60*30:
        print("duringtime, to do update cookie")
        # 删除所有的cookie
        _driver.delete_all_cookies()
        # 获取新的cookie,并写入
        cookie = cookie_login_data()
        _driver.add_cookie(cookie)
        # 重置开始时间
        start_time = endtime
        print("start_time",start_time)
        # 需要把重置的时间return回去,让对象self.time接收更新,否则self.time一直都是记录的开始时间
        return start_time, _driver
    else:
        # 如果不满足条件,则直接返回记录的开始时间、返回添加初始cookie的driver
        return start_time, _driver