目录

0. 上节内容回顾

1 . 浏览器基本操作

1.1 启动 退出

1. 手动安装driver ,启动浏览器时,需要传递2个参数:

2. 自动安装driver ,启动浏览器时

1.2 窗口设置

1.3 页面导航

1.4 获取页面信息

1.5 页面截图

2. 浏览器的高级操作

2.1 窗口切换

2.2 操作Cookies

2.3 执行JavaScrip

今日内容:浏览器交互(调整窗口大小、导航、获取网页数据、窗口切换、读写cookies、执行js、处理alert)

0. 上节内容回顾

  • selenium 有三大组件:其中核心是 webdriver
  • selenium webdriver 中有两大对象:
    • 对浏览器的操作:WebDriver
    • 对元素的操作: WebElement
  • selenium 4 已经发布,具有新的特性和语法
  • selenium 测试环境,可以手动搭建,也可以自动化搭建

1 . 浏览器基本操作

1.1 启动 退出

1. 手动安装driver ,启动浏览器时,需要传递2个参数:

  • service: 浏览器驱动对象,driver的存放路径 (自动配置,可以省略service参数)
  • options:浏览器参数对象

selenium 只接收 service options(重点)
service options 才会接收其他的更多的参数,具体接收什么参数,不同浏览器,有不同的选项
Chrome为例:
  • ChromeDriver https://chromedriver.chromium.org/capabilities
  • Chrome https://peter.sh/experiments/chromium-command-line-switches/
如果不传递任何参数,也是可以的(以默认的方式启动)
手动退出
driver.quit()
自动退出
with driver:
driver.get("https://baidu.com")
可以更优雅的写法
with webdriver.Chrome(service=service, options=options) as driver:
driver.get("https://baidu.com")

2. 自动安装driver ,启动浏览器时

1.2 窗口设置

调用webdriver对象的方法
方法
作用
set_window_size(width, height)
设置窗口大小
get_window_size()
获取窗口大小
set_window_position(x,y)
设置窗口位置
get_window_position()
获取窗口位置
set_window_rect()
设置窗口大小 +位置
get_window_rect()
获取窗口大小 + 位置
maximize_window()
窗口最大化
minimize_window()
窗口最小化
fullscreen_window()
全屏
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome() #启动浏览器
driver.get("https://baidu.com") # 访问指定的页面
#ele = driver.find_element(By.XPATH, '//*[@id="kw"]')
#ele.send_keys("百度一下?")
print(driver.get_window_size()) #获取窗口大小
print(driver.get_window_position()) #获取窗口位置
print(driver.get_window_rect()) #获取窗口大小 + 位置
#driver.minimize_window() #窗口最小化
driver.fullscreen_window() #全屏
driver.set_window_size(900,600)
#driver.quit() #手动退出,显式退出

1.3 页面导航

调用webdriver对象的方法
方法
作用
get(url)
跳转到指定页面
back()
返回上个页面
forward()
前进到下一个页面
refresh()
刷新当前页面
from selenium import webdriverdriver = webdriver.Chrome() #启动浏览器
driver.get("https://www.baidu.com/") # 访问指定的页面driver.back() #回到空白页面
driver.forward() # 前进到百度
driver.refresh() # 刷新页面#driver.quit() #手动退出,显式退出

1.4 获取页面信息

UI自动化测试,断言实际结果从哪来?
主要是WebDriver对象属性
属性
内容
例子
name
浏览器名字
chrome
capabilities
浏览器能力
{'browserVersion': '95.0.463',..}
current_url
当前网址
https://baidu.com
title
页面title
百度一下
page_source
HTML源码
<html><title>百度一下</title
current_window_handle
当前窗口ID
ANC-SJ2
window_handles
所有窗口ID
['ANC-SJ2', 'S92-1C2']
switch_to
窗口切换
tabwindowalertframe
timeouts
超时时间

window_handles 可以用来统计窗口的数量,或者切换窗口

switch_to 可以创建新窗口、切换iframe页面、处理alert弹窗

driver = webdriver.Chrome()  # 启动浏览器
driver.get("https://www.baidu.com/")  # 访问指定的页面key_l = ["name", "capabilities", "current_url", "title", "current_window_handle", "window_handles","switch_to", "timeouts"]
for key in key_l:  # 从列表中遍历属性print(key)print(getattr(driver, key))print("-" * 30)
# driver.quit() #手动退出,显式退出

1.5 页面截图

方法
作用
例子
get_screenshot_as_png()
截图的二进制内容
b'\x89PNG\r\n\x1a\n\x..
get_screenshot_as_base64()
截图的base64内容
iVBORw0KGgoAAAAN...
get_screenshot_as_file(path)
截图保存到文件
共同点: 都是截图
不同点:对截图处理
driver = webdriver.Chrome()  # 启动浏览器
driver.get("https://www.baidu.com/")  # 访问指定的页面b = driver.get_screenshot_as_png()  # 返回二进制
print(b)
with open("a.png", "wb") as f:f.write(b)
print("*" * 30)b64 = driver.get_screenshot_as_base64()  # 返回字符串
print(b64)
b = base64.b64decode(b64)  # 字符串转二进制
with open("b.png", "wb") as f:f.write(b)
print("*" * 30)driver.get_screenshot_as_file("c.png") #截图保存到文件driver.quit() #手动退出,显式退出
有了截图的功能,在自动化测试就不用一直盯着浏览器了,可以使用无头模式加速执行
并在测试失败的是,检查截图内容

2. 浏览器的高级操作

2.1 窗口切换

方法
作用
例子
switch_to.alert
切换到弹窗
switch_to.active_element
切换到聚焦的元素
switch_to.frame('frame_name')
切换到iframe
switch_to.new_window('window_type')
创建新窗口
switch_to.window('window_name')
切换到窗口
driver = webdriver.Chrome()  # 启动浏览器 是空白页
print("当前页面的id是",driver.current_window_handle)
print("当前所有的窗口ID是",driver.window_handles)driver.switch_to.new_window("tab") #创建tab
driver.switch_to.new_window("window") #创建windows
print("当前页面的id是",driver.current_window_handle)
print("当前所有的窗口ID是",driver.window_handles)#切换窗口
for win_id in driver.window_handles: #遍历窗口IDdriver.switch_to.window(win_id) #根据ID切换窗口print("当前页面ID是",driver.current_window_handle)
driver = webdriver.Chrome()  # 启动浏览器 是空白页
driver.get("http://118.24.147.95:8086/switch_to.html")  # 跳转到测试页面
# 1. 处理alert 弹窗
alert = driver.switch_to.alert  # js弹窗是阻塞型代码
print(alert)
alert.accept()  # 点击确定按钮
# alert.dismiss() # 点击取消按钮
# alert.send_keys("~") # 向弹出输入内容# 2.切换iframe
# 方法1. iframe 序号
# driver.switch_to.frame(0)  # 0表示第一个
# 方法2. iframe 元素本身
l = driver.find_elements(By.TAG_NAME, "iframe")  # 定位到所有的iframe元素
driver.switch_to.frame(l[0])  # 把元素传递进行切换ele = driver.find_element(By.CSS_SELECTOR, "h2")
print(ele)driver.quit()
1. 定位ifarme元素 (不管是什么元素,不管有多少元素,都是元素定位的问题)
2. 切换frame
3. frame中定位其他元素
4. 切回主窗口

2.2 操作Cookies

方法
作用
add_cookie(cookie:dict)
增加指定cookie
get_cookie(name)
获取指定cookie
delete_cookie(name)
删除指定cookie
delete_all_cookies()
删除所有cookies
get_cookies()
获取所有cooki

driver = webdriver.Chrome()  # 启动浏览器 是空白页
# http://118.24.147.95:8087/cookies 显示cookies
# http://118.24.147.95:8087/cookies/set/a/1 设置cookie a=1
# cookie 一定是字符串
driver.get("http://118.24.147.95:8087/cookies/set/a/1") # 跳转到测试页面driver.add_cookie({"name": "b", "value": "2"}) # 手动添加cookie
driver.delete_cookie("a") # 手动删除driver.refresh() # 刷新页面,展示最新的cookie结果
print(driver.get_cookies()) # 获取所有的cookiedriver.quit()
cookie完整内容
[{'domain': '118.24.147.95', 'httpOnly': False, 'name': 'b', 'path': '/', 'secure': False, 'value': '2'}]

2.3 执行JavaScript

selenium本身有很多功能使用JS实现
特殊问题,我们可以考虑用JS解决
方法
作用
例子
pin_script(script, script_key=None)
暂存JS片段
unpin(script_key)
取消暂存
get_pinned_scripts()
查看所有暂存
execute_script(script, *args)
执行JS代码,或暂存的JS
driver = webdriver.Chrome()  # 启动浏览器 是空白页driver.execute_script("alert(1)") # 不需要返回值
driver.switch_to.alert.accept() # 点击确定按钮a = driver.execute_script("return 1+1")  # 不需要返回值
print("1+1=", a)  # 返回值可以打印a = driver.execute_script("return 1+arguments[0]", 100) # 传递参数
print("a = ", a)ele = driver.find_element(By.TAG_NAME, "body")
driver.execute_script("console.log(arguments[0])", ele) # 传递元素# driver.quit()
运行结果:
总结
  • 浏览器的一般操作 :启动、退出、导航、获取信息
  • 浏览器高级操作: 窗口切换、操作Cookies,执行JS
  • 启动参数:最大化、无头模式

Python+Selenium4浏览器交互_web自动化(2)相关推荐

  1. Python+Selenium4元素定位_web自动化(3)

    目录 0. 上节回顾 1. 八大定位 2. 定位器 3. CSS选择器 4. XPath选择器 4.1. XPath语法 4.2. XPath 函数 5. 相对定位 5.1 XPath 中的相对定位[ ...

  2. python清空文本框_WEB自动化——解决python selenium使用clear清除文本框内容失效的问题...

    页面自带输入框默认值时,想要修改输入框的内容,使用clear()后再使用send_keys(),结果无法起到清除文本框内容的作用,反而会在输入框默认值后面追加内容. 解决方法: 一.通过键盘的快捷键进 ...

  3. Python Selenium4.0与浏览器的腻歪

    目录 前言 1.浏览器驱动是什么,如何下载安装 2.编写脚本时驱动放置 3.跨服务集群机器驱动放置 前言 Python Selenium编写的自动化脚本会自动打开浏览器进行模拟人类点击.输入.选择等操 ...

  4. python模拟浏览器代码_python 模拟浏览器

    想用python模拟浏览器访问web的方法测试些东西,有哪几种方法呢? 一类:单纯的访问web,不解析其js,css等. 1. urllib2 #-*- coding:utf-8 -* import ...

  5. python表单交互

    python表单交互 ​ 下载的静态网页总是返回相同的内容,而与网页交互,根据用户输入返回对应的内容.HTML定义了两种向服务器提交数据的方法,分别是GET和POST.使用GET方法时候,会将类似于查 ...

  6. python构建语音交互的智能机器人

    一.写在前面: ​ ~~~~~~~~ 经过几天的努力,基于python构建语音交互的智能机器人终于完成,今天这篇文章会完善阐述一下系统的总体架构,将前面的四篇文章串联起来,形成一个完善的系统.完整的项 ...

  7. Docker selenium自动化 - Python调用容器实例跑自动化查天气实例演示,docker selenium自动化环境部署过程

    Docker selenium自动化 - 环境部署与 Python 自动化运行实战演示 第一章:docker selenium 环境部署 ① 下载 selenium 镜像 ② 容器 selenium ...

  8. python接口测试框架实战与自动化进阶(三)

    python接口测试框架实战与自动化进阶 一.持续集成 1.持续集成环境搭建 1)安装Jenkins 官网下载后直接安装:https://jenkins.io/ 终端直接安装及启动:java -jar ...

  9. python 模拟浏览器selenium_使用python selenium webdriver模拟浏览器

    原博文 2016-12-18 18:26 − selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdri ...

最新文章

  1. Gradle dependency cache may be corrupt
  2. python opencv local_threshold_Python-OpenCV中的cv2.threshold
  3. php 面向对象 创建OOP
  4. IOS学习笔记之十一(包装类、description、isequal)
  5. python图形绘制库turtle中文开发文档及示例大全【最详细、连结果图都有,gif格式的!】
  6. UNICODE字符集
  7. ASP.NET MVC 入门11、使用AJAX
  8. C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)
  9. 安卓讲课笔记(9):列表视图
  10. Emmet的高级功能与使用技巧
  11. NAT篇 双剑合璧,无往不利——双向NAT
  12. idea的tomcat改端口号_Tomcat修改端口
  13. ansys19.0安装破解教程(图文详解)
  14. ai钢笔工具怎么描线_AI: 如何用钢笔工具画曲线
  15. arm64汇编中orr 和 mov的交替使用
  16. 手机银行告别“鸡肋”
  17. 上次的计网络课你是不是又旷课了
  18. SqlServer与MySql的一些常用用法的差别
  19. conda安装包时提示当前用户没有权限
  20. EasyExcel生成多个excel.xlsx进行压缩导出

热门文章

  1. 用Python把视频转动图
  2. ID|IC|CPU卡|国密卡|二代证|防复制门禁一体机门禁读卡器带触摸键盘(不带二维码)选型必备
  3. Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary
  4. Conv1d参数与输入数据均无nan,结果出现nan的问题解决
  5. 把Linux系统安装在U盘上
  6. 线性代数复习CH1:行列式
  7. bat定时进行ftp上传下载文件
  8. 想学点东西,可是心静不下去。纠结…
  9. 为了流量,何同学做了个“假B站”?
  10. ORA-32594: COMMENT 命令的对象类别无效