标题
web 企业微信实战(一)
课程价值
- 了解 selenium IDE
- 掌握使用remote复用已有的浏览器
- 掌握使用cookie登陆
大纲
- selenium简介
- selenium IDE
- 使用remote复用已有的浏览器
- 使用cookie登陆
时长
90分钟
PPT
https://pdf.ceshiren.com/xly2/selenium%20企业微信1/assets/player/KeynoteDHTMLPlayer.html#0
脚本编写
应用
参考链接
selenium 官网:https://www.selenium.dev/
selenium python doc: https://seleniumhq.github.io/selenium/docs/api/py/
chromedriver下载路径:CNPM Binaries Mirror
常见问题
-
下载好的对应driver,(比如chromedriver,firefox drive…)的配置问题。
- 下载浏览器对应的driver版本,chromedriver 配置环境变量
- 配置完环境变量打印一下 PATH
- 重启命令行以及 pycharm
-
学会找报错信息,以及理解报错信息的含义
1、从后往前看,找到最后的几个E
2、找到 【当前文件名:行号】 ,点到代码中,分析是否由于书写问题,定位的问题…
不建议使用IDE录制
1、生成代码过于冗余
2、复杂的业务逻辑难以实现
3、没有实现断言, 结果的验证
复用浏览器
- 注意,浏览器
-
- 需要退出当前所有的谷歌浏览器(特别注意)
-
- 找到chrome的启动路径(下一页ppt)
-
- 配置环境变量(下一页ppt)
-
- 启动命令windows:chrome --remote-debugging-port=9222
- 启动命令mac:Google\ Chrome --remote-debugging-port=9222
配置
- windows
配置PATH ,如下图
启动命令:
chrome --remote-debugging-port=9222
- Mac
启动命令:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome - -remote-debugging-port=9222
- 注意:使用tab键,不要手动输入
代码加入option
option = Options()
option.debugger_address = '127.0.0.1:9222'
self.driver = webdriver.Chrome(options=option)
代码参考
def test_cookie(self):
# get_cookies() 获取当前页面的cookies
# cookies = self.driver.get_cookies()
# print(cookies)
# 打开 index页面,这时候需要登录
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
# 带有登录信息的cookie
cookies = [{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False, 'value': '1688851905935585'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False, 'value': '1688851905935585'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False, 'value': '1970325054155915'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False, 'value': 'IiwmHmbRQC3UgqmekvGcsqnLM0KaswKi1tpUIxZ7ME4eQqVFuj_8swXg8U3bGeAA'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False, 'value': 'a9205189'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.work.weixin.qq.com', 'expiry': 1629378403.32131, 'httpOnly': False, 'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1597674494,1597732354,1597757140,1597842337'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False, 'value': 'direct'}, {'domain': '.work.weixin.qq.com', 'expiry': 1629378336, 'httpOnly': False, 'name': 'wwrtx.c_gdpr', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.qq.com', 'expiry': 1660914455, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.1737553657.1582007476'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1597842403'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False, 'value': '9528437336544'}, {'domain': 'work.weixin.qq.com', 'expiry': 1597864124, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/', 'secure': False, 'value': '8vrdlbn'}, {'domain': '.qq.com', 'expiry': 1597928855, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.1503122815.1597647640'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False, 'value': 'qRUzpbH0haAyOoSE7hvpm2vY8YCj94Yxh2h0CFjn4sps63nEtyWRxtWFq3zgA9Ox_oOqrJxdsBGlHIfvmQojMdXEzlaYwzBYb6bdZJLqJAPWwc1ZMBT0EGPYpEkXdqSlgs7cfLUeUrHrW4dDo5yKyequJSMbmefJqVgRVAQjDeytttEwajDTdF-HjpdzDoi1Qv377KsOSGSM6hITMWleJsZgBqxnXlFHF6NG3gd44jwN-_ayhvINXvBFrx-vS94xEjMkyu5oVq2_8qfY_NKUwQ'}, {'domain': '.work.weixin.qq.com', 'expiry': 1600434633, 'httpOnly': False, 'name': 'wwrtx.i18n_lan', 'path': '/', 'secure': False, 'value': 'en-us%2Cen'}]
for cookie in cookies:
if 'expiry' in cookie.keys():
cookie.pop("expiry")
self.driver.add_cookie(cookie)
# 重新打开 已带有cookie 信息的index 页面
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
sleep(3)
def test_importcontact(self):
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
# 带有登录信息的cookie
cookies = [
{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False,
'value': '1688851905935585'},
{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False,
'value': '1688851905935585'},
{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False,
'value': '1970325054155915'},
{'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False,
'value': 'IiwmHmbRQC3UgqmekvGcsqnLM0KaswKi1tpUIxZ7ME4eQqVFuj_8swXg8U3bGeAA'},
{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False,
'value': 'a9205189'},
{'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False,
'value': '1'}, {'domain': '.work.weixin.qq.com', 'expiry': 1629378403.32131, 'httpOnly': False,
'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False,
'value': '1597674494,1597732354,1597757140,1597842337'},
{'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False,
'value': 'direct'},
{'domain': '.work.weixin.qq.com', 'expiry': 1629378336, 'httpOnly': False, 'name': 'wwrtx.c_gdpr',
'path': '/', 'secure': False, 'value': '0'},
{'domain': '.qq.com', 'expiry': 1660914455, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False,
'value': 'GA1.2.1737553657.1582007476'},
{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d',
'path': '/', 'secure': False, 'value': '1597842403'},
{'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False,
'value': '9528437336544'},
{'domain': 'work.weixin.qq.com', 'expiry': 1597864124, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/',
'secure': False, 'value': '8vrdlbn'},
{'domain': '.qq.com', 'expiry': 1597928855, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False,
'value': 'GA1.2.1503122815.1597647640'},
{'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False,
'value': 'qRUzpbH0haAyOoSE7hvpm2vY8YCj94Yxh2h0CFjn4sps63nEtyWRxtWFq3zgA9Ox_oOqrJxdsBGlHIfvmQojMdXEzlaYwzBYb6bdZJLqJAPWwc1ZMBT0EGPYpEkXdqSlgs7cfLUeUrHrW4dDo5yKyequJSMbmefJqVgRVAQjDeytttEwajDTdF-HjpdzDoi1Qv377KsOSGSM6hITMWleJsZgBqxnXlFHF6NG3gd44jwN-_ayhvINXvBFrx-vS94xEjMkyu5oVq2_8qfY_NKUwQ'},
{'domain': '.work.weixin.qq.com', 'expiry': 1600434633, 'httpOnly': False, 'name': 'wwrtx.i18n_lan',
'path': '/', 'secure': False, 'value': 'en-us%2Cen'}]
for cookie in cookies:
if 'expiry' in cookie.keys():
cookie.pop("expiry")
self.driver.add_cookie(cookie)
# 重新打开 已带有cookie 信息的index 页面
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
self.driver.find_element(By.CSS_SELECTOR, ".index_service_cnt_itemWrap:nth-child(2)").click()
self.driver.find_element(By.ID, "js_upload_file_input").send_keys("/Users/juanxu/Downloads/mydata.xlsx")
assert "mydata.xlsx" == self.driver.find_element(By.ID, "upload_file_name").text
# 实现 cookie 数据的持久化存储
def test_shelve(self):
# shelve python 内置的模块,相当于小型的数据库
# 带有登录信息的cookie
db = shelve.open('./mydbs/cookies')
# db['cookie'] = cookies
# db.close()
cookies = db['cookie']
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
for cookie in cookies:
if 'expiry' in cookie.keys():
cookie.pop("expiry")
self.driver.add_cookie(cookie)
# 重新打开 已带有cookie 信息的index 页面
self.driver.get("https://work.weixin.qq.com/wework_admin/frame#index")
self.driver.find_element(By.CSS_SELECTOR, ".index_service_cnt_itemWrap:nth-child(2)").click()
self.driver.find_element(By.ID, "js_upload_file_input").send_keys("/Users/juanxu/Downloads/mydata.xlsx")
assert "mydata.xlsx" == self.driver.find_element(By.ID, "upload_file_name").text
github 代码
https://github.com/ceshiren/HogwartsFIS02
作业
- 使用cookie 登录企业微信,完成导入联系人,加上断言验证