当需要登录的网址中登录方式只包含扫描二维码时,如何用自动化实现呢?
方法1.这里需要用到复用,跳过登录阶段
比如企业微信登录时,可选方式只有一种:手机扫描二维码,验证通过后才可以进入企业微信
https://work.weixin.qq.com/wework_admin/loginpage_wx
selenium中的webdriver提供了一种方法
chrome_arg=webdriver.ChromeOptions()
chrome_arg.debugger_address= '127.0.0.1:9222'
self.driver = webdriver.Chrome(options=chrome_arg)
以调试模式打开浏览器。
具体步骤如下:
1.cmd指定Chrome调试地址
chrome -remote-debugging-port=9222
2.验证调试地址是否可以正常打开---注意必须能正常打开,后续pytest文件才可以正常执行
3.手机扫描二维码并登录--这里用的是企业微信二维码
4.代码中指定以调试方式打开Chrome--注意ip地址和端口号需要和cmd中对应
1 # -*- coding:utf-8 -*- 2 # author:xjw 3 # date=2021/3/2 4 #企业微信web端登录 5 import json 6 from http import cookies 7 8 from time import sleep 9 10 from selenium import webdriver 11 12 13 class Testweixin(): 14 def setup(self): 15 #self.driver=webdriver.Chrome() 16 chrome_arg=webdriver.ChromeOptions() 17 chrome_arg.debugger_address= '127.0.0.1:9222' 18 self.driver = webdriver.Chrome(options=chrome_arg) 19 self.driver.implicitly_wait(5) 20 def teardown(self): 21 self.driver.quit() 22 # def test_weixinlogin(self): 23 # 登录首页登录 24 # self.driver.get('https://work.weixin.qq.com/') 25 # self.driver.find_element_by_css_selector('[class="index_top_operation_loginBtn"]').click() 26 # self.driver.find_element_by_css_selector('[class="login_registerBar_link"]').click() 27 # self.driver.find_element_by_xpath('//*[@id="corp_name"]').send_keys('123') 28 29 30 def test_after_login(self): 31 # 登录后浏览器复用 32 self.driver.get('https://work.weixin.qq.com/wework_admin/frame') 33 self.driver.find_element_by_xpath('//*[@id="menu_contacts"]').click() #//*[@id="menu_contacts"]/span 34 sleep(3) 35 36 # def test_cookies(self): 37 # #使用cookies登录 38 # cookies = self.driver.get_cookies() 39 # # print(cookies) 40 # self.driver.get('https://work.weixin.qq.com/wework_admin/frame') 41 # # with open('tmp.txt','r',encoding='utf-8') as f: 42 # # #f.write(json.dumps(cookies)) 43 # # raw_cookies=f.read() 44 # # cookies=json.loads(raw_cookies) 45 # # for cookie in cookies: 46 # # self.driver.add_cookie(cookie) 47 # self.driver.refresh() 48 # sleep(2)
预期结果:
执行代码后,直接跳过登录阶段进入企业微信首页并点击了通讯录。
方法2:使用cookies登录
步骤:
1.手机扫描二维码并登录成功
2.代码中获取登录的cookies,携带此cookies
可以先获取cookies存入本地文件,然后从本地文件读取,以下代码可以直接跳过二维码扫描操作,直接访问通讯录
1 # -*- coding:utf-8 -*- 2 # author:xjw 3 # date=2021/3/2 4 #企业微信web端登录 5 import json 6 from http import cookies 7 8 from time import sleep 9 10 from selenium import webdriver 11 12 13 class Testweixin(): 14 def setup(self): 15 #self.driver=webdriver.Chrome() 16 chrome_arg=webdriver.ChromeOptions() 17 chrome_arg.debugger_address= '127.0.0.1:9222' 18 self.driver = webdriver.Chrome() 19 self.driver.implicitly_wait(5) 20 def teardown(self): 21 self.driver.quit() 22 # def test_weixinlogin(self): 23 # 登录首页登录 24 # self.driver.get('https://work.weixin.qq.com/') 25 # self.driver.find_element_by_css_selector('[class="index_top_operation_loginBtn"]').click() 26 # self.driver.find_element_by_css_selector('[class="login_registerBar_link"]').click() 27 # self.driver.find_element_by_xpath('//*[@id="corp_name"]').send_keys('123') 28 29 30 def test_after_login(self): 31 # 登录后浏览器复用 32 self.driver.get('https://work.weixin.qq.com/wework_admin/frame') 33 self.driver.find_element_by_xpath('//*[@id="menu_contacts"]').click() #//*[@id="menu_contacts"]/span 34 sleep(3) 35 36 def test_cookies(self): 37 #使用cookies登录 38 39 # #存入cookies 注意此时self.driver = webdriver.Chrome(options=chrome_arg) 要带上options=chrome_arg 40 # cookies = self.driver.get_cookies() 41 # with open('tmp.txt', 'w', encoding='utf-8') as f: 42 # f.write(json.dumps(cookies)) 43 44 #读取cookies 注意此时self.driver = webdriver.Chrome() 要去掉options 45 self.driver.get('https://work.weixin.qq.com/wework_admin/frame#contacts') 46 # self.driver.find_element_by_xpath('//*[@id="menu_contacts"]').click() 47 with open('tmp.txt','r',encoding='utf-8') as f: 48 #f.write(json.dumps(cookies)) 49 raw_cookies=f.read() 50 cookies=json.loads(raw_cookies) 51 for cookie in cookies: 52 self.driver.add_cookie(cookie) 53 self.driver.refresh() 54 sleep(2)