當需要登錄的網址中登錄方式只包含掃描二維碼時,如何用自動化實現呢?
方法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)