Python+Selenium4浏览器交互_web自动化(2)
目录
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:浏览器参数对象
- 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 窗口设置
方法
|
作用
|
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 页面导航
方法
|
作用
|
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 获取页面信息
属性
|
内容
|
例子
|
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
|
窗口切换
|
tab、window、alert、frame
|
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()
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()
[{'domain': '118.24.147.95', 'httpOnly': False, 'name': 'b', 'path': '/', 'secure': False, 'value': '2'}]
2.3 执行JavaScript
方法
|
作用
|
例子
|
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)相关推荐
- Python+Selenium4元素定位_web自动化(3)
目录 0. 上节回顾 1. 八大定位 2. 定位器 3. CSS选择器 4. XPath选择器 4.1. XPath语法 4.2. XPath 函数 5. 相对定位 5.1 XPath 中的相对定位[ ...
- python清空文本框_WEB自动化——解决python selenium使用clear清除文本框内容失效的问题...
页面自带输入框默认值时,想要修改输入框的内容,使用clear()后再使用send_keys(),结果无法起到清除文本框内容的作用,反而会在输入框默认值后面追加内容. 解决方法: 一.通过键盘的快捷键进 ...
- Python Selenium4.0与浏览器的腻歪
目录 前言 1.浏览器驱动是什么,如何下载安装 2.编写脚本时驱动放置 3.跨服务集群机器驱动放置 前言 Python Selenium编写的自动化脚本会自动打开浏览器进行模拟人类点击.输入.选择等操 ...
- python模拟浏览器代码_python 模拟浏览器
想用python模拟浏览器访问web的方法测试些东西,有哪几种方法呢? 一类:单纯的访问web,不解析其js,css等. 1. urllib2 #-*- coding:utf-8 -* import ...
- python表单交互
python表单交互 下载的静态网页总是返回相同的内容,而与网页交互,根据用户输入返回对应的内容.HTML定义了两种向服务器提交数据的方法,分别是GET和POST.使用GET方法时候,会将类似于查 ...
- python构建语音交互的智能机器人
一.写在前面: ~~~~~~~~ 经过几天的努力,基于python构建语音交互的智能机器人终于完成,今天这篇文章会完善阐述一下系统的总体架构,将前面的四篇文章串联起来,形成一个完善的系统.完整的项 ...
- Docker selenium自动化 - Python调用容器实例跑自动化查天气实例演示,docker selenium自动化环境部署过程
Docker selenium自动化 - 环境部署与 Python 自动化运行实战演示 第一章:docker selenium 环境部署 ① 下载 selenium 镜像 ② 容器 selenium ...
- python接口测试框架实战与自动化进阶(三)
python接口测试框架实战与自动化进阶 一.持续集成 1.持续集成环境搭建 1)安装Jenkins 官网下载后直接安装:https://jenkins.io/ 终端直接安装及启动:java -jar ...
- python 模拟浏览器selenium_使用python selenium webdriver模拟浏览器
原博文 2016-12-18 18:26 − selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdri ...
最新文章
- Gradle dependency cache may be corrupt
- python opencv local_threshold_Python-OpenCV中的cv2.threshold
- php 面向对象 创建OOP
- IOS学习笔记之十一(包装类、description、isequal)
- python图形绘制库turtle中文开发文档及示例大全【最详细、连结果图都有,gif格式的!】
- UNICODE字符集
- ASP.NET MVC 入门11、使用AJAX
- C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)
- 安卓讲课笔记(9):列表视图
- Emmet的高级功能与使用技巧
- NAT篇 双剑合璧,无往不利——双向NAT
- idea的tomcat改端口号_Tomcat修改端口
- ansys19.0安装破解教程(图文详解)
- ai钢笔工具怎么描线_AI: 如何用钢笔工具画曲线
- arm64汇编中orr 和 mov的交替使用
- 手机银行告别“鸡肋”
- 上次的计网络课你是不是又旷课了
- SqlServer与MySql的一些常用用法的差别
- conda安装包时提示当前用户没有权限
- EasyExcel生成多个excel.xlsx进行压缩导出
热门文章
- 用Python把视频转动图
- ID|IC|CPU卡|国密卡|二代证|防复制门禁一体机门禁读卡器带触摸键盘(不带二维码)选型必备
- Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary
- Conv1d参数与输入数据均无nan,结果出现nan的问题解决
- 把Linux系统安装在U盘上
- 线性代数复习CH1:行列式
- bat定时进行ftp上传下载文件
- 想学点东西,可是心静不下去。纠结…
- 为了流量,何同学做了个“假B站”?
- ORA-32594: COMMENT 命令的对象类别无效