Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作

这篇具有很好参考价值的文章主要介绍了Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、iframe操作

iframe识别:
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具

语法:
driver.switch_to.frame(‘方式’)
1、常见处理方法三种

  • index:下标
  • name:id或name属性的值
  • webelement:元素

2、通过下标进入
进入第一个iframe:

driver.switch_to.frame(0)

3、通过id或name属性的值进入
通过id或name属性的值进入指定的iframe:

driver.switch_to.frame('iframe')
driver.switch_to.frame('iframeName')

4、通过iframe元素进入iframe
通过iframe元素进入指定iframe:

iframe=driver.find_element(By.ID,"iframe")
driver.switch_to.frame(iframe)

完整案例代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("http://localhost:8080/iframeDemo.html")
# 通过下标进入frame
driver.switch_to.frame(0)
# 通过id或name属性的值进入指定的iframe
driver.switch_to.frame('iframe')
driver.switch_to.frame('iframeName')
# 通iframe元素进入iframe
iframe=driver.find_element(By.ID,"iframe")
driver.switch_to.frame(iframe)
driver.find_element(By.ID,'user').clear()
driver.find_element(By.ID,'user').send_keys("this is a frame test !")
print(driver.find_element(By.ID,'user').get_attribute('value'))

二、select下拉框操作

1、select控件识别
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
常见操作有两种:一步到位,二次管控!
2、一步到位
一步到位: 直接定位元素点击即可,示例如下:

# 一步到位,直接选择内蒙
driver.find_element(By.CSS_SELECTOR,"[value='0015']").click()
print(driver.find_element(By.CSS_SELECTOR,"[value='0015']").text)

3、二次管控
二次管控: 先定位select框,再定位select里的选项,通过Select对象进行强转,来调用select控件中的Api来达到操作的目的。

常见操作方法:

  • select_by_index():通过下标选择对应项
  • select_by_value():通过value选择对应项
  • select_by_visible_text():通过可见文本选择对应项

示例代码如下:

select = Select(driver.find_element(By.ID, "select"))
# 选择第一个选项
select.select_by_index(0)
# 调用first_selected_option就能获取当前下拉框选中值啦
print(select.first_selected_option.text)
sleep(2)
# 选择典韦
select.select_by_value("3")
# 调用first_selected_option就能获取当前下拉框选中值啦
print(select.first_selected_option.text)
sleep(2)
# 选择凯
select.select_by_visible_text("凯")
# 调用first_selected_option就能获取当前下拉框选中值啦
print(select.first_selected_option.text)

4、遍历所有选项

示例代码如下:

示例代码如下:

# 打印所有选项的text
for option in select.options:
    print("选项为:"+option.text)

完整代码示例:

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("http://localhost:8080/SelectDemo.html")
# 一步到位,直接选择典韦
# driver.find_element(By.CSS_SELECTOR,"[value='3']").click()
# print(driver.find_element(By.CSS_SELECTOR,"[value='3']").text)
select = Select(driver.find_element(By.ID, "select"))
# 选择第一个选项
select.select_by_index(0)
# 调用first_selected_option就能获取当前下拉框选中值啦
print(select.first_selected_option.text)
sleep(2)
# 选择典韦
select.select_by_value("3")
# 调用first_selected_option就能获取当前下拉框选中值啦
print(select.first_selected_option.text)
sleep(2)
# 选择凯
select.select_by_visible_text("凯")
# 调用first_selected_option就能获取当前下拉框选中值啦
print(select.first_selected_option.text)

# 打印所有选项的text
for option in select.options:
    print("选项为:"+option.text)
sleep(2)

三、交互操作弹出框的处理

1、弹出框分类:
弹出框分为两种,一种基于原生JavaScript写出来的弹窗,另一种是自定义封装好的样式的弹出框,即原生JavaScript写出来的弹窗,另一种弹窗用click()基本就能搞定。 原生JavaScript写出来的弹窗又分为三种:

alert
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
confirm
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
prompt
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具

2、弹窗处理常用方法:
alert/confirm/prompt弹出框操作主要方法有:

driver.switch_to.alert:切换到alert弹出框上
alert.text:获取文本值
accept() :点击"确认"
dismiss():点击"取消"或者关闭对话框
send_keys() :输入文本值 --仅限于prompt,在alert和confirm上没有输入框

alert弹窗处理

示例代码如下:

# alert弹窗处理
driver.find_element(By.ID,"alert").click()
alert=driver.switch_to.alert
print(alert.text)
# 确定
alert.accept()
sleep(2)

confirm弹窗处理

示例代码如下:

# dialog对话框处理
driver.find_element(By.ID,"dialog").click()
alert=driver.switch_to.alert
print(alert.text)
# 取消操作
alert.dismiss()
sleep(2)

prompt弹窗处理

# 弹窗输入框
driver.find_element(By.ID,"welcome").click()
alert=driver.switch_to.alert
print(alert.text)
alert.send_keys("input 框")
alert.accept()
sleep(2)
print(alert.text)

四、执行Js操作

在做web自动化时,有些情况selenium的api无法完成,需要通过第三方手段比如js来完成实现,比如去改变某些元素对象的属性或者进行一些特殊的操作,本文将来讲解怎样来调用JavaScript完成特殊操作。

1、用法

driver.execute_script(js语句)

2、模拟场景
场景1

打开百度首页,并弹窗提示hellow,world!,关闭弹窗,控制台输出弹窗文本hellow,world! 示例代码如下:

# 执行js语句
driver.execute_script("alert('hellow,world!')")
alert=driver.switch_to.alert
print(alert.text)
# 确定
alert.accept()

场景2
示例代码如下:

# 将百度按钮改成MyLove
element = driver.find_element(By.ID, "su");
driver.execute_script("document.getElementById('su').setAttribute('value', 'MyLove');", element);

效果如下:
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
3、模拟滚动条操作
在写脚本时,总会遇到一种情况,就是当滚动拉倒最下面了,表单或者下拉框、按钮这些元素未在当前页面展示,而webdriver提供的方法都是操作当前页面可见的元素,这时我们使用JavaScript操作浏览器的滚动条,滚动后使页面元素可见,就可完成后面的元素操作了。

核心思路:
就是使用js去控制浏览器滚动条的位置,在使用selenium调用JavaScript操作js完成。

下面举例几种常用滚动条的js代码示例如下:

//拖动滚动条至底部
document.documentElement.scrollTop=10000
window.scrollTo(0,document.body.scrollHeight)

//拖动滚动条至顶部
document.documentElement.scrollTop=0
arguments[0].scrollIntoView(false);

//左右方向的滚动条可以使用window.scrollTo(左边距,上边距)方法
window.scrollTo(200,1000)

实际案例
以博客园我的文章列表页为例,来演示滚动条操作,具体代码如下:

from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.cnblogs.com/longronglang/")
driver.maximize_window()

# 获取第一篇文章列表元素
element = driver.find_element(By.CSS_SELECTOR,".forFlow [role='article']:nth-of-type(1) .vertical-middle")
sleep(2)
# 将页面滚动条拖到底部
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
# 将滚动条滚动至第三篇文章列表位置
driver.execute_script("arguments[0].scrollIntoView(true)", element)
sleep(2)
# 将滚动条滚动到顶部
driver.execute_script("arguments[0].scrollIntoView(false)", element)
sleep(2)
# 将滚动条滚动到指定位置
driver.execute_script("window.scrollTo(200,1000)")

五、Cookie操作之完美绕过验证码

下面我们就使用cookie操作,绕过登录验证码

还是以博客园为例,下面本文来介绍下如何绕过下图验证码,进入博客园

1、工具准备

  • Fiddler.exe
  • IDEA/Eclipse
  • selenium的cookie操作

2、使用Fiddler抓包
一般登陆网站成功后,会生成一个已登录状态的cookie,那么只需要直接把这个值拿到,用selenium进行addCookie操作即可。

可以先手动登录一次,然后抓取这个cookie,这里我们就需要用抓包工具fiddler了

先打开博客园登录界面,手动输入账号和密码(不要点登录按钮)
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
打开fiddler抓包工具,此时再点博客园登录按钮
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
登录成功后,再查看cookie变化,发现多了两组参数,多的这两组参数就是我们想要的,copy出来,一会有用
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
3、cookie操作语法

driver.add_cookie()
add_cookie(cookie_dict)方法里面参数是cookie_dict,说明里面参数是字典类型。

源码官方文档介绍:

add_cookie(self, cookie_dict)  

Adds a cookie to your current session.  
  
Args:  

- cookie_dict: A dictionary object, with required keys - "name" and "value"; 
optional keys - "path", "domain", "secure", "expiry"  

Usage:  

driver.add_cookie({'name' : 'foo', 'value' : 'bar'})  
driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})  
driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})

从官方的文档里面可以看出,添加cookie时候传入字典类型就可以了,等号左边的是name,等号左边的是value。

把前面抓到的两组数据(参数不仅仅只有name和value),写成字典类型:

{'name':'.CNBlogsCookie','value''2C3AE01E461B2D2F1572D02CB936D77A053089AA2xxxx...'}
{'name':'.Cnblogs.AspNetCore.Cookies','value':'CfDJ8Mmb5OBERd5FqtiQlKZZIG4HKz_Zxxx...'}

4、完整示例代码

# coding:utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.cnblogs.com/longronglang/")

# 添加cookie
c1 = {u'domain': u'.cnblogs.com',
      u'name': u'.CNBlogsCookie',
      u'value': u'xxxx',
      u'expiry': 15412950521,
      u'path': u'/',
      u'httpOnly': True,
      u'secure': False}

c2 = {u'domain': u'.cnblogs.com',
      u'name': u'.Cnblogs.AspNetCore.Cookies',
      u'value': u'xxxx',
      u'expiry': 15412950521,
      u'path': u'/',
      u'httpOnly': True,
      u'secure': False}
# 添加2个值
driver.add_cookie(c1)  
driver.add_cookie(c2)
time.sleep(3)

# 刷新下页面就见证奇迹了
driver.refresh()
# 再来个登录后操作
driver.find_element_by_link_text(u"博客园").click()
driver.find_element_by_link_text("Refain").click()

效果图
Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作,python,测试工具
注意:文章来源地址https://www.toymoban.com/news/detail-767637.html

  • 登录时候要勾选下次自动登录按钮。
  • addCookie()只添加name和value,对于博客园的登录是不成功。
  • 本方法并不适合所有的网站,一般像博客园这种记住登录状态的才会适合。

到了这里,关于Selenium4+Python3 - Iframe、Select控件、交互式弹出框、执行JS、Cookie操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 浏览器常用基本操作之python3+selenium4自动化测试(基础篇)

    1、打开指定的网页地址 我们使用selenium进行自动化测试时,打开浏览器之后,第一步就是让浏览器访问我们指定的地址,可使用get方法实现 1 2 3 from selenium import webdriver driver = webdriver.Edge() driver.get( \\\'https://www.baidu.com/\\\' )   # 本行用于访问指定的地址 2、获取当前页面url 我们在

    2024年02月01日
    浏览(46)
  • 【Python爬虫】selenium4新版本使用指南

    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 IE(7, 8, 9, 10, 11) , Mozilla Firefox , Safari , Google Chrome , Opera , Edge 等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能

    2024年02月06日
    浏览(33)
  • python爬虫之selenium4使用(万字讲解)

    声明以下的例子,只是来作为测试学习,并不作为真正的爬虫 我们在浏览一些网站时,有不少内容是通过 JavaScript动态渲染的,或是 AJAX 请求后端加载数据,这其中涉及到了不少加密参数如 token,sign,难以找规律,较为复杂。像前面的百度贴吧的一个评论的回复,百度翻译等

    2024年04月10日
    浏览(38)
  • 【Python爬虫 • selenium】selenium4新版本自动获取驱动的常见问题

    关于上次发布的文章《【Python爬虫 • selenium】selenium4新版本使用指南》很多人反馈说自动获取的驱动会导致闪退,本次文章给出详细配置。 首先说一下大家闪退的问题。我在低版本的python中,安装selenium,发现安装的是旧版本,并不是selenium4的版本,就导致用法还是selenium

    2024年01月17日
    浏览(39)
  • 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 今日内容:浏览器交互(调整窗口大小、导航

    2023年04月08日
    浏览(36)
  • Python+Selenium4三大等待&预期条件_web自动化(4)

    目录 0. 上节回顾 1. 定位失败的原因 2. 强制等待 3. 隐式等待 4. 显式等待 【重点难点】 4.1. 实例化 WebDriverWait 对象 4.2. 指定等待条件 4.3. 等待条件的具体要求 4.3. 1. 等待条件是一个函数 4.3. 2. 返回值是布尔值 4.3. 3. 只有一个参数,参数值是driver 4.3. 4. 出现异常 5. 流畅等待 (

    2024年02月11日
    浏览(32)
  • Python+Selenium4环境搭建与原理讲解_web自动化(1)

    1. 认识Selenium 2. Selenium 三大组件 3. Selenium自动化测试环境搭建 3.1 安装selenium 库 3.2 安装浏览器驱动 1. 查看浏览器版本号 2. 下载浏览器驱动 3. 把driver移动到Path目录 4. 验证driver就绪   3.3 启动浏览器 4. Selenium自动化测试环境的自动化配置 1. 安装依赖 2. 启动浏览器 5. Selenium工作

    2024年02月06日
    浏览(46)
  • Python Selenium4.3.0(新语法) web自动化测试工具

    1 介绍 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等 这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够

    2024年01月24日
    浏览(33)
  • selenium+python处理iframe切换

    selenium+python处理iframe切换有3种方法: 1、如果iframe有id或name,则可根据iframe的id或name切换。 2、把iframe当作页面元素,通过元素定位表达式进行切换。 3、将iframe存储到list中,然后根据ifrane的索引定位 (适合页面有多个iframe,且前两种方法无法使用)。 如果页面有多层ifram

    2024年02月11日
    浏览(29)
  • 基于python下selenium库实现交互式图片保存操作(批量保存浏览器中的图片)

    Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一,可以通过编程与浏览量的交互式操作对网页进行自动化控制。基于这种操作进行数据保存操作,尤其是在图像数据的批量保存上占据优势。本博文基于selenium 与jupyterlab实现批量保存浏览器搜索到的图片。 Se

    2024年01月24日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包