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