Python+Selenium4浏览器交互_web自动化(2)

这篇具有很好参考价值的文章主要介绍了Python+Selenium4浏览器交互_web自动化(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

0. 上节内容回顾

1 . 浏览器基本操作

1.1 启动 退出

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

1.2 窗口设置

1.3 页面导航

1.4 获取页面信息

1.5 页面截图

2. 浏览器的高级操作

2.1 窗口切换

2.2 操作Cookies

2.3 执行JavaScript

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

0. 上节内容回顾

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

1 . 浏览器基本操作

1.1 启动 退出

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

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

Python+Selenium4浏览器交互_web自动化(2)

selenium 只接收 service options (重点)
service options 才会接收其他的更多的参数,具体接收什么参数,不同浏览器,有不同的选项
Chrome 为例:
  • ChromeDriverhttps://chromedriver.chromium.org/capabilities
  • Chromehttps://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" )

关于浏览器自动关闭

因为是在函数内执行的浏览器操作,在函数执行完毕之后,程序内所有的步骤都结束了,关于这段程序的进程也就结束了,浏览器包含在内。

Python+Selenium4浏览器交互_web自动化(2)

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()
全屏
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
driver.get("https://www.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()
刷新当前页面
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
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
窗口切换
tab window alert frame
timeouts
超时时间

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

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

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
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)
截图保存到文件
共同点: 都是截图
不同点:对截图处理
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
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')
切换到窗口
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
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: #遍历窗口ID
    driver.switch_to.window(win_id) #根据ID切换窗口
    print("当前页面ID是",driver.current_window_handle)
Python+Selenium4浏览器交互_web自动化(2)
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
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)
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

Python+Selenium4浏览器交互_web自动化(2)文章来源地址https://www.toymoban.com/news/detail-405201.html

chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
# 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()) # 获取所有的cookie

#driver.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
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)  # 启动浏览器
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()
运行结果:
Python+Selenium4浏览器交互_web自动化(2)
总结
  • 浏览器的一般操作 :启动、退出、导航、获取信息
  • 浏览器高级操作: 窗口切换、操作Cookies,执行JS
  • 启动参数:最大化、无头模式

到了这里,关于Python+Selenium4浏览器交互_web自动化(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决selenium4在部分电脑上运行时报异常GPU process launch failed: error_code=18无法打开浏览器窗口

    我在台式windows10上运行的一点问题没有的程序拷贝到同样操作系统的笔记本上运行就会报异常 刚开始一直是怀疑是没有添加禁用gpu加速参数导致,后来加上去--disable-gpu后还是报该异常。 最后将所有常用参数一个个尝试,添加--no-sandbox参数后解决。 示例:

    2024年02月11日
    浏览(48)
  • selenium4.15.2 报错Exception managing chrome: error sending request for url 和 打开Chrome浏览器自动退出问题

    最近更新了一不小心更新了selenium4.15.2,导致每次运行它都会主动去国外官网请求一遍,因为访问不了国外网址,就加载特别慢 最后报错 Exception managing chrome: error sending request for url (https://chromedriver.storage.googleapis.com/index.html),然后再运行,一开始以为是webdriver版本和chrome版本

    2024年02月05日
    浏览(116)
  • 〖Python WEB 自动化测试实战篇⑨〗- 实战 - selenium 实现浏览器标签页的切换

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2023年04月08日
    浏览(90)
  • Web自动化Selenium-浏览器定制启动参数

    在自动化测试过程中,为了达到某种效果,我们需要在初始化浏览器的时候做一些特殊的设置,如“阻止图片加载”“阻止JavaScript执行”等。这些需要Selenium的浏览器options(如ChromeOptions、FirefoxOptions)来帮助我们完成。 本节我们再来看一些options的常用属性及方法。 ●optio

    2024年02月14日
    浏览(54)
  • Edge浏览器做web自动化测试(selenium)

    查看浏览器设置看edge浏览器版本   下载edge浏览器对应版本驱动 Microsoft Edge WebDriver - Microsoft Edge Developer   下载完毕后压缩包    后面请参考selenium使用 selenium自动化测试(初窥门径)_邓霖涛的博客-CSDN博客 在导入selenium的maven 相关依赖可以用选择edge的驱动   测试代码如下:  执

    2024年02月12日
    浏览(44)
  • 使用 Web HID API 在浏览器中进行HID设备交互(纯前端)

    最近在搞HID透传 《STM32 USB使用记录:HID类设备(后篇)》 。 市面上的各种测试工具都或多或少存在问题,所以就自己写一个工具进行测试。目前来说纯前端方案编写这个工具应该是最方便的,这里对 Web HID API 相关内容做个记录。 Web HID API 相关内容参考如下: https://develop

    2024年01月19日
    浏览(48)
  • Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

    说明:本记录是在Windows系统上执行的! 起因是:博导要求统计一下国内某个领域的专家情况,统计主持国家自然科学基金的副教授和教授都有哪些大牛! 于是:本人去[NSFC]:https://kd.nsfc.cn/ 下载全部的历史基金项目书。。。。工作量太大就……半自动化实现吧!!! 无论是

    2024年04月10日
    浏览(112)
  • 软件测试/测试开发丨Selenium Web自动化多浏览器处理

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27185 用户使用的浏览器(firefox,chrome,IE 等) web 应用应该能在任何浏览器上正常的工作,这样能吸引更多的用户来使用 是跨不同浏览器组合验证网站或 web 应用程序功能的过程 是兼容性测试的一个

    2024年02月09日
    浏览(64)
  • python用selenium打开浏览器后秒关闭浏览器-解决方法

    学习selenium的时候,上手第一个脚本发现成功打开浏览器后,代码执行完毕浏览器又秒关闭了,代码如下: 1、检查代码,代码中没有写driver.quit()或driver.close()方法,也没有其它错误提示; 2、检查版本号,浏览器版本号,驱动版本号,确认版本号没有问题; 3、最后找到解决

    2024年02月11日
    浏览(80)
  • selenium+python切换浏览器窗口

    selenium在当前浏览器页面打开了新的窗口,此时如果要聚焦到新开的浏览器窗口,就需要切换到新的窗口,切换窗口的操作,具体selenium+python示例如下:

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包