企业微信自动化登录1


官网文档:https://seleniumhq.github.io/selenium/docs/api/py/
浏览器厂商提供了webdriver驱动,所以用selenium控制浏览器不非法

复用已有浏览器(调试)
用途:
方便调试selenium脚本
使用remote开启远程调试端口
1、将chrome的路径——C:\Program Files (x86)\Google\Chrome\Application添加至path系统变量,或者将cmd中的路径切换至chrome安装目录
2、chrome浏览器全部处于关闭状态,将chrome高级设置——关闭 Google Chrome 后继续运行后台应用 也关掉,如下图

3、命令执行:chrome --remote-debugging-port=9222 (检查9222端口是否被占用,设置未被占用的端口)

4、执行后验证方式为:在自动打开的浏览器内输入ip和端口号:127.0.0.1:9222 后,出现如下页面即为成功

5、在pycharm中输入运行如下代码:会看到没有打开新的浏览器,而是直接从第四步的页面访问到百度首页
from selenium import webdriver class TestWework: def setup_method(self): opt = webdriver.ChromeOptions() opt.debugger_address = "127.0.0.1:9222"# 设置debug地址 # self.driver = webdriver.Chrome() 原来的初始化driver self.driver=webdriver.Chrome(options=opt)#现在的初始化driver def teardown_method(self): self.driver.quit() def test_demo(self): self.driver.get("https://www.baidu.com")
企业微信自动化登录2
企业微信的自动化登录
from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep #复用浏览器:先通过命令行执行chrome --remote-debugging-port=9222,在打开的浏览器内输入ip和端口:127.0.0.1:9222,或者试下没这步,直接打开企业微信网址扫码登录成功后,运行如下代码达到复用浏览器效果 class TestWework: def setup_method(self): opt = webdriver.ChromeOptions() opt.debugger_address = "127.0.0.1:9222" # 设置debug地址 # self.driver = webdriver.Chrome() 原来的初始化driver self.driver = webdriver.Chrome(options=opt) # 现在的初始化driver def teardown_method(self): self.driver.quit() def test_demo(self): self.driver.get("https://work.weixin.qq.com/wework_admin/frame") self.driver.find_element(By.ID, "menu_contacts").click() print(self.driver.get_cookies()) #''' #新开浏览器自动扫码登录成功:通过将test_demo中获得的正确的cookie信息加入selenium,达到在新开浏览器自动扫码登录成功并点击通讯录效果 def test_cookie(): driver=webdriver.Chrome() driver.implicitly_wait(5) driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx?")#这是扫码的页面,因为直接复用cookies去访问扫码通过的页面时会由于cookie内默认域名——weixin.qq.com与selenium默认的域名——data:, 不同而导致cookie失效,所以设置cookie之前必须需先打开一下目标地址——weixin.qq.com print(driver.get_cookies())#注意1!此处获得cookies并不是正确的cookies,和test_demo里打印出的cookies不同,所以若直接用下面注释的代码而获得cookies则会造成认证不通过的问题,自然也无法进入扫码后的页面。注意2!driver.get("网址")不成功并不会自动报错 #cookies=driver.get_cookies()#获取扫码后留在浏览器的身份认证cookie信息 cookies=[{'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False, 'value': 'ykfrgz5a_7wxiqStqYmoaesVMW3yf3zAQlUyUcG1bobGCoqKRABePufvrgILJSe35QokaZvfoC2cHg7vcp8lOELaXZUcS26JeU9Wz6CODKg1K1YWlgsS-oiouyvoIQUPBb3AlM-KuNcymZFWLHIQmIAxPGJUuWmJJmyTrOAyXF6XpdGLqUcxMWOEJ_Kv_Qn21QI8BKkFNsbAu5xtn0NYM-4RPxjAXdPNF6V6-7BXaV58wQkFuDCgl7ansCfjXXFpLmdeNh7x6rkfLJJkRsjnyA'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False, 'value': 'ebHWhpltgCr45cJqu4LHh41AXrshLH3B2V5Pu7Ezf086PF5efjOulpY5ZfJVp0yW'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1638934593'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.logined', 'path': '/', 'secure': False, 'value': 'true'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.cs_ind', 'path': '/', 'secure': False, 'value': ''}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False, 'value': '1688854321275335'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False, 'value': '1970325009507720'}, {'domain': '.qq.com', 'expiry': 1702006741, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.1848351874.1638869099'}, {'domain': '.qq.com', 'httpOnly': False, 'name': 'pgv_info', 'path': '/', 'secure': False, 'value': 'ssid=s5276701225'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False, 'value': 'a5436410'}, {'domain': '.work.weixin.qq.com', 'expiry': 1670470592, 'httpOnly': False, 'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1638890106,1638890113,1638890597,1638934593'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False, 'value': '39133735411497724'}, {'domain': '.work.weixin.qq.com', 'expiry': 1670405097, 'httpOnly': False, 'name': 'wwrtx.c_gdpr', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False, 'value': '1688854321275335'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False, 'value': 'direct'}, {'domain': '.qq.com', 'httpOnly': False, 'name': '_qpsvr_localtk', 'path': '/', 'secure': False, 'value': '0.7811498614680983'}, {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvid', 'path': '/', 'secure': False, 'value': '3178219336'}, {'domain': '.qq.com', 'expiry': 1639021141, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.452945125.1638869099'}, {'domain': '.work.weixin.qq.com', 'expiry': 1641526990, 'httpOnly': False, 'name': 'wwrtx.i18n_lan', 'path': '/', 'secure': False, 'value': 'zh'}] for cookie in cookies: driver.add_cookie(cookie)#将获取到的cookies加入selenium driver.get("https://work.weixin.qq.com/wework_admin/frame") sleep(3) driver.find_element(By.ID, "menu_contacts").click() driver.quit() #'''
使用yaml文件实时存储正确cookies的企业微信的自动化登录升级版
需要用的其他知识点有:
- with open(path,模式,encoding="UTF-8") as f: 用法
- yaml文件的写入:yaml.dump(data,file)
- yaml文件的读取:yaml.safe_load(f)
在代码中的运用实例如图中两处:

详细代码如下:
import yaml from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep #复用浏览器:先通过命令行执行chrome --remote-debugging-port=9222,在打开的浏览器内输入ip和端口:127.0.0.1:9222,或者试下没这步,直接打开企业微信网址扫码登录成功后,运行如下代码达到复用浏览器效果 #第一步:通过复用登录成功的浏览器,函数test_getcookies将实时获取的正确cookies写入当前目录下的data.yaml文件进行存储 def test_getcookies(): opt = webdriver.ChromeOptions() opt.debugger_address = "127.0.0.1:9222" # 设置debug地址 # driver = webdriver.Chrome() 原来的初始化driver driver = webdriver.Chrome(options=opt) # 现在的初始化driver driver.implicitly_wait(5) driver.get("https://work.weixin.qq.com/wework_admin/frame") data=driver.get_cookies() with open("data.yaml","w",encoding="UTF-8") as f: yaml.dump(data,f) #第二步:函数test_login开启新的浏览器,通过读取data.yaml文件中的cookie给selenium从而完成自动化扫码登录 def test_login(): driver = webdriver.Chrome() driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx?") with open("data.yaml",encoding="UTF-8") as f: yaml_data=yaml.safe_load(f) for cookie in yaml_data: driver.add_cookie(cookie) # 将获取到的cookies加入selenium driver.get("https://work.weixin.qq.com/wework_admin/frame") sleep(3) driver.find_element(By.ID, "menu_contacts").click() sleep(3) driver.quit()

