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