企业微信登录的另一种解决办法

  • 看到好多人在纠结复用浏览器不成功的问题,非常浪费时间
  • 之前我在做的时候就觉得每次复用浏览器还要关掉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 个赞