- 看到好多人在纠结复用浏览器不成功的问题,非常浪费时间
- 之前我在做的时候就觉得每次复用浏览器还要关掉chrome来回折腾特别麻烦,所以写了个等待扫码的方法,思路和当时的代码给你们贴一下,你们可以参考这个思路加到自己的代码里,就不用在这块浪费时间了
- 两个函数用来登陆加保存cookies,可以在setup里调用一次,之后就可以把调用注释掉当天不用再保存直接就能用保存好的cookies登录了。
def login_and_save_cookies(driver:webdriver):
"""打开登陆页面,登陆后抓取cookies信息保存下来以便之后自动登陆使用"""
driver.get('https://work.weixin.qq.com/wework_admin/loginpage_wx')
while not is_login_ok():
sleep(3)
cookies = driver.get_cookies()
file = shelve.open('wxcookies')
file['cookies'] = cookies
file.close()
def is_login_ok(driver:webdriver) -> bool:
"""校验是否扫码登录完毕"""
if r'https://work.weixin.qq.com/wework_admin/loginpage_wx' in driver.current_url:
return False
return True
- 或者你可以写个判断,通过保存的cookies中的一个过期时间字段来判断一下这个保存下来的cookies是不是过期了,没过期就可以不调用这个函数
def is_login_cookies_work(driver:webdriver) -> bool:
"""通过保存在文件中的cookies中的过期时间判断cookies是否还有效"""
if not os.path.exists('wxcookies.dat'):
return False
file = shelve.open('wxcookies')
cookies = file['cookies']
file.close()
if len(cookies) == 0:
return False
for cookie in cookies:
if cookie.get('name') in ['_gid']:
if time.time() < cookie.get('expiry'):
return True
return False
- 在basepage里初始化的时候,就可以加入一段登录代码,将功能组合起来,判断如果没有cookie文件那么就等待用户扫码,如果有文件并且在有效期内,就直接使用cookie文件进行登录
if not is_login_cookies_work(self.driver):
login_and_save_cookies(self.driver)
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
file = shelve.open('wxcookies')
cookies = file['cookies']
for cookie in cookies:
self.driver.add_cookie(cookie)
友情提示,代码改动过,没测试,可能会有小毛病哈,有问题自行解决~无售后~
1 个赞