Selenium-窗口截图、验证码处理

1、窗口截图

说明:把当前操作的界面,截图保存到指定位置

1.1 为什么要窗口截图?

自动化脚本是由程序去执行的,因此有时候打印的错误信息并不是十分明确。如果在执行出错的时候 
对当前窗口截图保存,那么通过图片就可以非常直观地看到出错的原因。

1.2 窗口截图的方法

说明:在Selenium中,提供了截图方法,我们只需要调用即可 
方法: 
	driver.get_screenshot_as_file(imgpath) 
		imgpath:图片保存路径

1.3 案例

需求:
	1、打开百度页面
	2、搜索CSDN
	3、截图保存


# 导包
import time
from time import sleep

from selenium import webdriver

# 获取浏览器驱动对象
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
# 窗口最大化
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(120)

url = "https://www.baidu.com"

driver.get(url)

# handles = driver.current_window_handle
# print("百度页面当前句柄为:", handles)
# 使用CSS id选择器获取搜索框
driver.find_element_by_css_selector("#kw").send_keys("CSDN")

driver.find_element_by_css_selector("[value= '百度一下']").click()

# handles1 = driver.window_handles
# print("所有页面句柄为:", handles1)


while True:
    try:
        start = time.perf_counter()
        driver.find_element_by_xpath('/html/body/div[2]/div[4]/div[1]/div[3]/div[1]/div/div[1]/h3/a[1]').click()
        print('已经定位到元素')
        end = time.perf_counter()

        print("元素定位时间为", start + end)
        break
    except:
        print("未定位到元素")

# 获取所有页面句柄
handles = driver.window_handles
print("所有页面句柄", handles)



driver.switch_to.window(handles[1])

driver.find_element_by_css_selector('#toolbar-search-input').send_keys("测试")
driver.find_element_by_css_selector("#toolbar-search-button").click()

# 截图,将截图文件放在当前路径下名称为csdn.jpg
driver.get_screenshot_as_file('./csdn.jpg')
sleep(3)

driver.quit()

2、验证码

说明:一种随机生成的信息(数字、字母、汉字、图片、算术题)等为了防止恶意的请求行为,增加应用的 安全性。

2.1 为什么要学习验证码?

在Web应用中,大部分系统在用户登录注册的时候都要求输入验证码,而我们在设计自动化测试脚本的时候, 就需要面临处理验证码的问题。

2.2 验证码的处理方式

说明:Selenium中并没有对验证码处理的方法,在这里我们介绍一下针对验证码的几种常用处理方式 
方式:
	1). 去掉验证码 (测试环境下-采用) 
	2). 设置万能验证码 (生产环境和测试环境下-采用)
	3). 验证码识别技术 (通过Python-tesseract来识别图片类型验证码;识别率很难达到100%) 
	4). 记录cookie (通过记录cookie进行跳过登

提示

1. 去掉验证码、设置万能验证码:都是开发来完成,我们在这里不做讲解 
2. 验证码识别技术:成功率不高,验证码种类繁多,不太适合 
3. 记录cookie:比较实用,我们对它进行下讲解

3、 cookie

3.1 cookie是什么?

在这里插入图片描述

1. Cookie是由Web服务器生成的,并且保存在用户浏览器上的小文本文件,它可以包含用户相关的信息。 
2. Cookie数据格式:键值对组成(python中的字典) 
3. Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie 数据
4. Cookie使用:当浏览器再次请求该网站时,浏览器把请求的数据和Cookie数据一同提交给服务器,服务 器检查该Cookie,以此来辨认用户状态。

3.2 cookies的应用场景

1. 实现会话跟踪,记录用户登录状态 
2. 实现记住密码和自动登录的功能 
3. 用户未登录的状态下,记录购物车中的商品

4、Selenium操作cookie

说明:Selenium中对cookie操作提供相应的方法 

方法:
	1. get_cookie(name) --> 获取指定cookie 
			name:为cookie的名称 
	2. get_cookies() --> 获取本网站所有本地cookies 
	3. add_cookie(cookie_dict) --> 添加cookie 
		cookie_dict:一个字典对象,必选的键包括:"name" and "value"

4.1 案例

需求:使用cookie实现跳过登录 
	1). 手动登录百度,获取cookie 
	2). 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作

4.2 案例实现步骤分析

BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到帐号的控制权, 
通行贴吧、知道、百科、文库、空间、百度云等百度主要产品。 
1. 登录baidu,登录成功后抓取 (BDUSS) 
2. 使用add_cookie()方法,添加 (BDUSS)键和值 
3. 调用刷新方法 driver.refresh()

4.3 示例代码

# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
# 设置cookie
url = "https://www.baidu.com"
driver.get(url)
driver.add_cookie({"name": "BDUSS", "value":"dzdHh6MDNNdVNCUmtJQzZ3WjlHZ0xHWHN5VHFFR3U2RXY0STVwMGdVNmpMVDFqSVFBQUFBJCQAAAAAAAAAAAEAAABsZEvGteO147XOtc7Q3cilMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOgFWOjoBVjdE"})

# 获取所有的cookies信息
#cookies = driver.get_cookies()
#print("cookies内容为:", cookies)
#for co in cookies:
#    print(co['name'])

#cookie = driver.get_cookie("BDUSS")
#print("cookie:", cookie)

# 暂停2秒
sleep(2)
# 刷新 必须进行刷新才能看到效果
driver.refresh()



"""
    目标: cookie操作
    案例:
        使用cookie绕过百度登录
    步骤:
        1. 手动登录百度网站
        2. 手动获取登录后的cookies 'BDUSS'
        3. 使用selenium内的add_cookie(name='BDUSS', value='xxxx')
"""




# 暂停 2
sleep(5)
# 关闭驱动对象
#driver.quit()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炫酷的腿毛!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值