【Python自动化训练营3期】Web 企业微信实战1

标题

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()
    1. chromedriver的配置问题。
    • 下载浏览器对应的driver版本
    • chromedriver配置环境变量
    • 重启命令行以及pycharm
    1. 学会找报错信息,以及理解报错信息的含义
  • 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

课后调查表

https://github.com/Ravenna1031/testing_project

https://github.com/haoyu449/Python_workspace.git

https://github.com/13795318537/test-python/tree/master/sele_test

https://github.com/Leesin-one/TestPro/commit/a8479fdf4c2c3a112735f96a25c175d769f3376c

https://github.com/chenweizhong-beep/pytest/tree/master/selenium_testing

https://github.com/guchenli/hogwarts1/tree/master/自动化/web自动化

补充了断言,还有点问题
1、添加完成员断言提示信息后,用的强制等待提示信息消失再去删除测试数据,感觉这里可以优化下改成显示等待,监听提示信息消失再去删除数据
2、删除已添加的成员后,提示信息会有两个,先出现正在删除…然后出现删除成功。还需要优化

https://github.com/Zero-Fire/Howgwarts03/tree/master/testing_web

https://github.com/kopgittowin/Test_Selenium

https://github.com/huangruivip/test/tree/master/test_3

https://github.com/wudi02/HogwartsFIS03/tree/master/test_selenium

https://github.com/ZJC97-zjc/hogwarts--01/tree/edf82ca089f19f868a2489b3cedb61108705135d/python_practice/zuo_ye05_sele

https://github.com/jennymyy86/Python-practice-task/commit/773344e27c58f8097aea3070587da0556560c3f3

https://github.com/xiehuixin/pythonProject/tree/master/test_selenium

https://github.com/Max-Qhh/HgXly3_WorkHome/tree/master/selenium_pratice_adduser

https://github.com/plood6/selenium