网页截图+cookie处理+自动化验证码处理
网页截图
案例:打开百度页面,截图
#/usr/bin python #-*- coding:UTF-8 -*- #####################截图##################### from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com/") ##截图 driver.get_screenshot_as_file(r"E:\study\python\baidu.jpg") sleep(5) driver.quit()
cookie的处理
Cookie是储存在用户本地终端上的数据,实际上是一小段的文本信息。
帮助 Web 站点保存有关访问者的信息,方便用户的访问。如记住用户名密码实现自动登录。
在自动化UI测试过程中,也可以用来避开登录
driver.get(url) driver.delete_all_cookies() for cookie in cookies: driver.add_cookie(cookie) driver.refresh()
# -*- coding: utf-8 -*- # @Time : 2020/7/17 15:06 # @Author : 饭盆里 # @File : test_cookie.py # @Software: PyCharm # @desc : import shelve from time import sleep import pytest from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By class Test(): def setup(self): options = Options() # 和浏览器打开的调试端口进行通信 # 浏览器要使用 --remote-debugging-port=9222 开启调试, # 由于我环境变量设置了变量,alias driver_debugging='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222' # 所以可以直接:driver_debugging options.debugger_address = '127.0.0.1:9222' self.driver = webdriver.Chrome(options=options) # self.driver = webdriver.Chrome() self.driver.implicitly_wait(3) def teardown(self): self.driver.quit() @pytest.mark.skip def test_baidu(self): self.driver.get('https://www.baidu.com/') self.driver.find_element(By.ID,'kw').send_keys('hi') self.driver.find_element(By.XPATH,'//*[@id="su"]').click() sleep(5) def test_wework(self): self.driver.get("https://work.weixin.qq.com/") # 获取 cookies # print(self.driver.get_cookies()) cookies = [{'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.vid', 'path': '/', 'secure': False, 'value': '1688850531850742'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.vst', 'path': '/', 'secure': False, 'value': 'PI81GkMu8osptnJ46fIu-UWJvR3o8_ViBwX5USscimOQRrHRyNdnruNfbjNLbSU2p3AvksJoKJc6tACT8EJXxe89v6xc0h_5FZUIikMzapf27LnrSjJkfUxRoHkefiaUAoTRgR0a_QBWoj8mEOELID9xl2Etr5gBTKAqCPdJzz3aBZC5b7iKufwcWtgb54qvKyXIK4J5zMnAy8DBzvrRb2pUE_hYYbkptzwyfk5rR7xiK01F3fqXjJwA2QIuI5R_e35ZDA10FFYBxpMtVyvbJA'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.vid', 'path': '/', 'secure': False, 'value': '1688850531850742'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wxpay.corpid', 'path': '/', 'secure': False, 'value': '1970325138147142'}, {'domain': '.work.weixin.qq.com', 'expiry': 1626742501, 'httpOnly': False, 'name': 'Hm_lvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1594975399,1594979354,1594979612,1595206501'}, {'domain': '.qq.com', 'expiry': 2147385600, 'httpOnly': False, 'name': 'pgv_pvid', 'path': '/', 'secure': False, 'value': '8752271993'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ref', 'path': '/', 'secure': False, 'value': 'direct'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.ltype', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'wwrtx.d2st', 'path': '/', 'secure': False, 'value': 'a3834163'}, {'domain': 'work.weixin.qq.com', 'expiry': 1595238009, 'httpOnly': True, 'name': 'ww_rtkey', 'path': '/', 'secure': False, 'value': 'oj731e'}, {'domain': '.work.weixin.qq.com', 'httpOnly': False, 'name': 'Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d', 'path': '/', 'secure': False, 'value': '1595206501'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.refid', 'path': '/', 'secure': False, 'value': '26225621643276726'}, {'domain': '.work.weixin.qq.com', 'httpOnly': True, 'name': 'wwrtx.sid', 'path': '/', 'secure': False, 'value': 'lvWc6ImOzsx44Nw-2SegyMqIl7_H2EiVGhYcto58RPhmIx18vxT56MuBeZCy7aHo'}, {'domain': '.work.weixin.qq.com', 'expiry': 1595238009, 'httpOnly': False, 'name': 'wwrtx.c_gdpr', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.qq.com', 'expiry': 1658051906, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.1583622381.1594901080'}, {'domain': '.work.weixin.qq.com', 'expiry': 1597798500, 'httpOnly': False, 'name': 'wwrtx.i18n_lan', 'path': '/', 'secure': False, 'value': 'zh-cn'}] # # 创建或者打开一个数据库 db = shelve.open("cookies") # # 将数据存储到 shelve 中 db["cookies"] = cookies # # # 取出数据 cookies = db["cookies"] #把cookie 中的时间戳去除"expiry",然后加入到浏览器的cookies中 for cookie in cookies: if "expiry" in cookie.keys(): cookie.pop("expiry") # 把字典加入到 driver 的 cookie 中 self.driver.add_cookie(cookie) sleep(2) self.driver.get("https://work.weixin.qq.com/wework_admin/frame#contacts") # sleep(4) self.driver.find_element(By.XPATH, "//*[@id='menu_contacts']").click() # db.close()
- 手动在代理浏览器页面进行扫码登陆企业微信
-        用代码获取此时的cookie:
self.driver.get_cookies() 
将此时的cookie打印后,放入一个变量中,以备后续使用
#/usr/bin python #-*- coding:UTF-8 -*- #####################cookie##################### from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com/") ##获取cookie cookie = driver.get_cookies() ##打印全部cookie print(cookie) ##打印第一组cookie print(cookie[0]) #添加cookie 字典形式 driver.add_cookie({'name':'fanpl','value':'fanfan'}) for cookie in driver.get_cookies(): print("%s --- %s" %(cookie['name'],cookie['value'])) driver.quit()
自动化测试验证码问题
验证码作用
不少网站在用户登录、用户提交信息等登录和输入的页面上使用了验证码技术。验证码技术可以有效防止恶意用户对网站的滥用,使得网站可以有效避免用户信息失窃、保证网站稳定安全性。
但是验证码给自动化测试带来一些不便,使脚本无法正常运行覆盖功能模块。
解决办法
1.去掉验证码
这是最简单的方法,对于开发人员来说,只是把验证码的相关代码注释掉即可,如果是在测试环境,这样做可省去了测试人员不少麻烦,如果自动化脚本是要在正式环境跑,这样就给系统带来了一定的风险。
2.设置万能码
去掉验证码的主要是安全问题,为了应对在线系统的安全性威胁,可以在修改程序时不取消验证码,而是程序中留一个“后门”---设置一个“万能验证码”,只要用户输入这个“万能验证码”,程序就认为验证通过,否则按照原先的验证方式进行验证。
3.验证码识别技术(OCR)
例如可以通过Python-tesseract 来识别图片验证码,Python-tesseract是光学字符识别Tesseract OCR引擎的Python封装类。能够读取任何常规的图片文件(JPG, GIF ,PNG , TIFF等)。不过,目前市面上的验证码形式繁多,目前任何一种验证码识别技术,识别率都不是100% 。
4.记录cookie
通过向浏览器中添加cookie 可以绕过登录的验证码。
基于Cookie绕过验证码自动登录
案例:使用Cookie绕过百度验证码自动登录账户。(需要用到抓包工具)
from selenium import webdriver from time import sleep driver=webdriver.Firefox() driver.get("http://www.baidu.com/") #手动添加cookie driver.add_cookie({'name':'BAIDUID','value':'9E4BF1D44014…(根据实际获取值填写)'}) driver.add_cookie({'name':'BDUSS','value':'根据实际抓包获取值填写'}) sleep(2) driver.refresh() sleep(3) driver.quit()
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号