标题
Web 企业微信实战1
课程价值
- 了解 selenium IDE
- 掌握使用remote复用已有的浏览器
- 掌握使用cookie登陆
大纲
- selenium简介
- selenium IDE
- 使用remote复用已有的浏览器
- 使用cookie登陆
时长
90分钟
PPT
driver下载地址
指定driver路径的方式
webdriver.Chrome(executable_path="/Users/jaxon/work/driver/chromedriver/chromedriver")
配置环境变量的方式
self.driver = webdriver.Chrome()
-
- chromedriver的配置问题。
- 下载浏览器对应的driver版本
- chromedriver配置环境变量
- 重启命令行以及pycharm
-
- 学会找报错信息,以及理解报错信息的含义
- 3.浏览器不要设置缩放!!!(很重要)
实战内容
复用浏览器核心代码
def test_wework():
# 调用chromeoptions方法
opt = webdriver.ChromeOptions()
# 设置复用浏览器的地址
opt.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(options=opt)
# 设置隐式等待
driver.implicitly_wait(10)
# 打开企业微信主页
driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
# 点击通讯录
driver.find_element_by_id("menu_contacts").click()
复用浏览器注意事项:
selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
原因:selenium默认域名是data:,,cookie中自带的域名,如果发现当前域名不在cookie中时,则cookie设置失败,使用cookie登录前,必须先访问下目标地址
# 简易版使用cookie登录
def test_login():
driver = webdriver.Chrome()
# 设置cookie前访问企业微信扫码登录页面
driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx")
cookies = [{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False, 'value': '1688853776947167'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False, 'value': '1688853776947167'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False, 'value': 'a8475451'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1608037499'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False, 'value': '0298360'}, {'domain': '.work.weixin.qq.com', 'expiry': 1639573499, 'httpOnly': False, 'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1608015717,1608018410,1608033752,1608037499'}, {'domain': '.qq.com', 'expiry': 1913719559, 'httpOnly': False, 'name': 'pac_uid', 'path': '/', 'secure': False, 'value': '1_1140341230'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False, 'value': '0ElgUh3mpGKX6xV_7uoAGdTKbmKNitnwlGQzFLQx6r1sMRzLEkW3VvNBnLjsgcXUnDFO8bw404Y33-E5bucGF9TVBrW8HUdNPn7X3OzD2HSr_J4a3XQ9sxxGxH6NsMiID55YE1wv1xkryi5yCAl37N74cNeo6951XkKhDUF0xGIqg7PLZ7yREPJ3NLMXA-H5PI-6QObJ1KbbGCIajuYTW8aKnftkWsDYRhgngRgCT6BxacBrHhN_uLdLpaoG8O3TEA4soQN9I9wXdmEpAEBNZw'}, {'domain': '.qq.com', 'expiry': 1610504837, 'httpOnly': False, 'name': 'luin', 'path': '/', 'secure': False, 'value': 'o1140341230'}, {'domain': 'work.weixin.qq.com', 'expiry': 1608043876, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/', 'secure': False, 'value': '70ev6p1'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False, 'value': '_F01MVWB0fzgFdbDXPuwQSoNUPcY87JfBnXS65yvkMoU8NRiFeKAiwjs3czXwhdt'}, {'domain': '.qq.com', 'expiry': 1608124159, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.1653717009.1607864168'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.qq.com', 'expiry': 1923032785, 'httpOnly': False, 'name': 'iip', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.qq.com', 'expiry': 1671109759, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.1623653580.1597756769'}, {'domain': '.work.weixin.qq.com', 'expiry': 1610630065, 'httpOnly': False, 'name': 'wwrtx.i18n_lan', 'path': '/', 'secure': False, 'value': 'zh'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False, 'value': 'direct'}, {'domain': '.qq.com', 'expiry': 1636438744, 'httpOnly': False, 'name': 'Qs_pv_323937', 'path': '/', 'secure': False, 'value': '2249797181056629500'}, {'domain': '.qq.com', 'expiry': 1636438744, 'httpOnly': False, 'name': 'Qs_lvt_323937', 'path': '/', 'secure': False, 'value': '1604902744'}, {'domain': '.qq.com', 'expiry': 1915776880, 'httpOnly': False, 'name': 'tvfe_boss_uuid', 'path': '/', 'secure': False, 'value': '24eb4972699141be'}, {'domain': '.work.weixin.qq.com', 'expiry': 1629292762, 'httpOnly': False, 'name': 'wwrtx.c_gdpr', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'o_cookie', 'path': '/', 'secure': False, 'value': '1140341230'}, {'domain': '.qq.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'ptcz', 'path': '/', 'secure': False, 'value': '50fe3df9eb9435ead58c8290282aaf977154534e56811646dbbef3454258458d'}, {'domain': '.qq.com', 'expiry': 1610504837, 'httpOnly': False, 'name': 'lskey', 'path': '/', 'secure': False, 'value': '000100007fc85cbf71476a98c6400a6c64ebb15207458ab4040f836bb11831ee86b214e142c51125e940276c'}, {'domain': '.qq.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'RK', 'path': '/', 'secure': False, 'value': 'FhyMDUK2Yb'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False, 'value': '1970325004134706'}, {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvi', 'path': '/', 'secure': False, 'value': '6815468544'}, {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvid', 'path': '/', 'secure': False, 'value': '1642135485'}]
for cookie in cookies:
# 把cookie传给driver
driver.add_cookie(cookie)
# 设置cookie后,再次访问企业微信
driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
time.sleep(3)
使用序列化的方法用cookie登录
# 获取cookie序列化后存入yaml
def test_get_cookie():
# 调用chromeoptions方法
opt = webdriver.ChromeOptions()
# 设置复用浏览器的地址
opt.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(options=opt)
# 设置隐式等待
driver.implicitly_wait(10)
cookies = driver.get_cookies()
with open("data.yaml", "w",encoding="utf-8") as f:
# 快捷键导包:mac option+enter,win: alt + enter
# 序列化cookie,存入yaml文件
yaml.dump(cookies,f)
# 从yaml里读取cookie登录
def test_login():
driver = webdriver.Chrome()
# 设置cookie前访问企业微信扫码登录页面
driver.get("https://work.weixin.qq.com/wework_admin/loginpage_wx")
# 打开yaml文件,读取cookie信息,赋值给yaml_date
with open("data.yaml",encoding="utf-8") as f:
yaml_date = yaml.safe_load(f)
for cookie in yaml_date:
# 把cookie传给driver
driver.add_cookie(cookie)
# 设置cookie后,再次访问企业微信
driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
time.sleep(3)
课后作业
使用序列化的方法用cookie登录企业微信,并添加成员
代码地址
https://github.com/ceshiren/HogwartsFIS03.git