Web自动化——frame切换&多窗口切换&窗口截图&验证码处理

1 frame切换

1.1 什么是frame?

frame是HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素;frame的两种形式:

# 形式一:
<frameset cols="25%,75%">
    <frame src="页面1">
    <frame src="页面2">
</frameset>
# 形式二:
<iframe name="iframe_a" src="页面" width="250" height="200"></iframe>

1.2 frame切换方法

(1)切换到指定frame:driver.switch_to.frame(frame_reference)
frame_reference:frame框架的name、 id或者定位到的frame元素

(2)恢复默认页面:driver.switch_to.default_content()
在frame中操作其他页面,必须先回到默认页面,才能进一步操作

2 多窗口切换

在HTML页面中,当点击超链接或者按钮时, 有些页面会在新窗口打开;Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;句柄:英文handle,是窗口的唯一识别码。

(1)获取当前窗口句柄:driver.current_window_handle
(2)获取所有窗口句柄:driver.window_handles
(3)切换指定句柄窗口:driver.switch_to.window(handle)

# 使用账号密码登陆牛客网
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.nowcoder.com/")
driver.find_element(By.XPATH,"//a[@id='nav-login']").click()

# 获取所有窗口句柄
handles = driver.window_handles
# 获取当前窗口句柄
handle_now = driver.current_window_handle
# 获取登陆页面的句柄并切换窗口
for handle_login in handles:
     if handle_login!=handle_now:
          driver.switch_to.window(handle_login)
# 切换为账号密码登陆
driver.find_element(By.XPATH,"//li[@class='tab-item']").click()
# 输入账号密码
driver.find_element(By.XPATH,"//div[@class='el-input']//input[@type='text']").send_keys("XXX")
driver.find_element(By.XPATH,"//input[@type='password']").send_keys("XXX")
driver.find_element(By.XPATH,"//button[@type='button']").click()

sleep(3)
driver.quit()

3 窗口截图

执行自动化测试的脚本有时候打印的错误信息不是十分明确,这时候可以通过保存当前窗口的截图直观的找出出错的原因。

截图方法:
driver.get_screenshot_as_file(图片保存路径)
driver.save_screenshot(图片保存路径)

4 验证码处理

验证码是为了防止恶意的请求行为,增加应用安全性而随机生成的图片、数字、字母、算术题等信息。在Web应用中,大部分系统在登陆注册时都要求输入验证码。

4.1 验证码处理方式:

(1)去掉验证码:测试环境下采用,由开发完成
(2)设置万能验证码:生产环境和测试环境采用,由开发完成
(3)验证码识别技术:通过Python-tesseract来识别图片类型验证码,验证码种类多,成功率也不高,不适合使用
(4)记录cookie: 通过记录cookie进行跳过登录

4.2 验证码处理方式:记录cookie

4.2.1 cookie是什么?

(1)Cookie是由Web Server生成的保存在用户浏览器上的小文本文件,可以包含用户相关的信息
(2)Cookie数据格式:键值对
(3)Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就给客户端浏览器设置一个Cookie数据
(4)Cookie使用:当浏览器再次请求该网站时, 浏览器把请求的数据和Cookie数据一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态
在这里插入图片描述
cookie一般用于:
(1)记住密码和自动登录
(2)会话跟踪,记录用户登录状态
(3)电商类项目中,记录用户在未登录状态下购物车中的商品

4.2.2 cookie操作

(1)获取指定cookie:driver.get_cookie(cookie名)
(2)获取当前网站所有cookies:driver.get_cookies(),返回一个存放cookie信息的列表,cookie信息存放在字典中
(3)添加cookie:driver.add_cookie(“name”:“值”,“value”:“值”)

# 使用cookie绕过登陆实现步骤:
      # step1:手动登录百度网站
      # step2:手动获取登录后的cookies
      # step3: add_cookie
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.add_cookie({"name":"BDUSS","value":"值"})
driver.refresh() # 必须刷新才能看到效果
sleep(5)
driver.quit()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值