Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待

news2025/1/11 21:51:19

目录

1. 窗口最大化

2.单选框操作

3. 复选框操作

4. 下拉列表

5. selenium 三种等待

6. 键盘操作

7.截屏

8.断言

9. Selenium操作JS弹窗控件

10.鼠标悬停与释放


1. 窗口最大化

driver.maximize_window()

2.单选框操作

driver.find_element_by_xpath("//input[@value='berry']").click()

3. 复选框操作

berrCheckBox1 = driver.find_element_by_xpath('//input[@value="orange"]').click()

4. 下拉列表

driver.find_element_by_name("fruit").click()
time.sleep(2)
driver.find_element_by_id("watermelon").click()

5. selenium 三种等待

(1) 强制等待

  常用于调试

import time
time.sleep(2)

(2) 隐式等待

  简介:  

  a 、 driver.implicitly_wait(10),隐式等待设置了一个时间,在一段时间内网页是否加载完成,如果完成了,就进行下一步;在设置的时间内没有完成,则会报超时加载;

  b、缺点是不智能,因为随着ajax技术的广泛应用,页面的元素往往都可以局部加载,也就是在整个页面没有加载完成的时候,可能我们需要的元素已经加载完成,那就没有必要在等待整个页面的加载,执行下一步,而隐式等待满足不了这一点;
      另外一点,隐式等待的设置时全局性的,在开头设置过后,整个的程序运行过程中都会生效,都会等待页面加载完成,不需要每次都需要设置一遍。

<head>
    <meta charset="UTF-8">
    <title>你喜欢的水果</title>
    <script type="text/javascript">
    </script>
</head>
<body>
    <p id="p1">这是你爱吃的水果吗?</p>
    <br>
    <br>
    <a href="http://www.sogou.com" target="_blank">sogou 搜索</a>
</body>
from selenium import webdriver
import time
# 导入异常 ,
# NoSuchElementException:找不到页面元素的异常
# TimeoutException:时间异常,超过规定时间,抛出异常
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 异常的获取与处理
import traceback

driver = webdriver.Chrome()
url = "http://www.sogou.com"
driver.get(url)

# 设置隐式等待
driver.implicitly_wait(10)
# 浏览器最大化
driver.maximize_window()
try:
    searchBox = driver.find_element_by_id("query").send_keys("selenium")
    click = driver.find_element_by_id("stb").click()
except(NoSuchElementException,TimeoutException):
    traceback.print_exc()#获取异常

time.sleep(2)
driver.quit()

(3) 显式等待

  简介:

  selenium中的wait模块的WebDriverWait()方法,配合until或者until_not方法,在辅助一些判断条件,就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,如果可见,就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;当然也可以判断某元素是否在规定时间内不可见等等的各种场景,需要根据自己实际的场景选择判断条件;

<head>
    <meta charset="UTF-8">
    <title>你喜欢的水果</title>
    <script type="text/javascript">
        function display_alert() {
            alert("I am an alert box !")
        }
    </script>
</head>
<input>
    <p>请选择你喜欢的水果</p>
    <select name="frult">
        <option id="peach" value="taozi">桃子</option>
        <option id="watermelon" value="西瓜">西瓜</option>
    </select>
    <br>
    <input type="button" onclick="display_alert()" value="Display alert box" />
    <input id="check" type="checkbox">是否喜欢吃水果?</input>
    <br><br>
    <input type="text" id="text" value="今年夏天西瓜很甜!">文本框</input>
</body>
from selenium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException,TimeoutException
import  traceback
import os
#显式等待要用WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#判断元素是否存在 expected_conditions  as EC:取别名
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
url = 'file:///'+os.path.abspath("test.html")
driver.get(url)

try:
    # 显示等待
    wait = WebDriverWait(driver,10,0.2) #浏览器驱动,10:代表最长超时时间(秒),0.2:间隔刷新时间(不写,0.5刷新一次)
    wait.until(EC.title_is("你喜欢的水果")) #判断标题是否等于 "你喜欢的水果"
    print(u"当前网页的标题是:'你喜欢的水果'") # u utf-8 编码

    #显示等待的另一种写法
    element = WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//input[@value='Display alert box']"))
    element.click()
    time.sleep(2)

    alert = wait.until(EC.alert_is_present())#判断有没有弹出 弹窗
    print(alert.text) #如果打开了,打印当前文本值
    time.sleep(2)
    alert.accept() #点击接受

except TimeoutException as e:
    print(traceback.print_exc())
except NoSuchElementException as e:
    print(traceback.print_exc())
except Exception as e:
    print(traceback.print_exc())

time.sleep(2)
driver.quit()

6. 键盘操作

(1) 获取并设置当前窗口位置

# 获取当前窗口的位置
posttion = driver.get_window_position()
print("初始值",posttion)

# 设置当前窗口位置
driver.set_window_position(x=120,y=120)
print("设置后",driver.get_window_position())

(2) 获取并设置当前窗口大小

# 设置当前窗口的大小
#设置新窗口大小,创建句柄,并取名为 'current'
driver.set_window_size(width="520",height="400",windowHandle='current')
print(driver.get_window_size(windowHandle='current'))

(3) 使用title属性识别和操作新弹出的浏览器窗口

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
# 导入BY类
from selenium.webdriver.common.by import By
#显式等待要用WebDriverWait
# 设置等待时间和超时时间
from selenium.webdriver.support.ui import WebDriverWait
# 导入堆栈类
import traceback
import time
# os.path子库以path为入口,用于操作和处理文件路径
import os

driver = webdriver.Chrome()
url= "file:///"+os.path.abspath("test.html")
driver.get(url)

# 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
# EC.element_to_be_clickable 判断是否被点击
WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()

# 获取当前所有打开的浏览器窗口句柄
all_handles = driver.window_handles
# 打印当前浏览器窗口句柄
print(driver.current_window_handle)
# 打印打开的浏览器窗口的个数
print(len(all_handles))
time.sleep(2)

if len(all_handles)>0:
    try:
        for windouHandle in all_handles:
            # 切换窗口
            driver.switch_to.window(windouHandle)
            print(driver.title)
            #判断当前浏览器窗口的title窗口属性是否等于“搜狗搜索引擎 - 上网从搜狗开始”
            if driver.title == "搜狗搜索引擎 - 上网从搜狗开始":
                #显示等待页面搜索输入框加载完成,然后输入内容“sogou”首页的浏览器窗口被找到
                WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("sogou首页的浏览器窗口被找到")
                time.sleep(2)
    except NoSuchElementException as e:
        print(traceback.print_exc())
    except TimeoutException  as e:
        print(traceback.print_exc())

#将浏览器窗口切换到默认窗口
driver.switch_to.window(all_handles[0])
#打印切换回默认窗口的title
print(driver.title)
#断言当前浏览器窗口的title属性是“你喜欢的水果”
assert  "你喜欢的水果" in driver.title
driver.quit()

(4)操作新弹出的浏览器窗口

<head>
    <meta charset="UTF-8">
    <title>你喜欢的水果</title>
    <script type="text/javascript">
    </script>
</head>
<body>
    <p id="p1">这是你爱吃的水果么</p>
    <br>
    <br>
    <a href="http://www.sogou.com" target="_blank">sogou 搜索</a>
</body>
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
# 导入BY类
from selenium.webdriver.common.by import By
#显式等待要用WebDriverWait
# 设置等待时间和超时时间
from selenium.webdriver.support.ui import WebDriverWait
# 导入堆栈类
import traceback
import time
# os.path子库以path为入口,用于操作和处理文件路径
import os

driver = webdriver.Chrome()
url= "file:///"+os.path.abspath("test.html")
driver.get(url)

# 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
# EC.element_to_be_clickable 判断是否被点击
WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()

# 获取当前所有打开的浏览器窗口句柄
all_handles = driver.window_handles
# 打印当前浏览器窗口句柄
print(driver.current_window_handle)
# 打印打开的浏览器窗口的个数
print(len(all_handles))
time.sleep(2)

if len(all_handles)>0:
    try:
        for windouHandle in all_handles:
            # 切换窗口
            driver.switch_to.window(windouHandle)
            # elenium的page_source方法可以获取到页面源码
            PageSource = driver.page_source
            if "搜狗搜索" in PageSource:
                WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("找到了")
                driver.find_element_by_id("stb").click()
                time.sleep(3)

    except NoSuchElementException as e:
        print(traceback.print_exc())
    except TimeoutException  as e:
        print(traceback.print_exc())

#将浏览器窗口切换到默认窗口
driver.switch_to.window(all_handles[0])
#打印切换回默认窗口的title
print(driver.title)

#断言当前浏览器窗口的title属性是“你喜欢的水果”
assert  "你喜欢的水果" in driver.title

driver.quit()

7.截屏

import time
from selenium import webdriver

driver = webdriver.Chrome()
url = "http://www.jg.com"
driver.get(url)
try:
    # 截屏
    result = driver.get_screenshot_as_file(r"d:\test.png")
    print(result)
except IOError as e:
    print(e)
driver.quit()

8.断言

# 通过断言页面是否存在某些关键字来确定页面而按照预期加载
assert "selenium" in driver.page_source,"页面源码中不存在该关键字!"

9. Selenium操作JS弹窗控件

(1)提示弹窗

<head>
    <meta charset="UTF-8">
    <title>弹窗控件</title>
    <script>
        function showPro() {
            var str=prompt('你快乐吗?')
            if (str){
                alert('谢谢你的回答!')
            }
        }
    </script>
    <script>
        function showAlert2() {
                alert('谢谢你的回答!')
        }
    </script>
     <script>
        function showAlert() {
                var x;
                x = confirm('确定要删除吗?');
                if (x ==true){
                    alert('点击了确认')
                }else{
                    alert('点击了取消')
                }
        }
    </script>
</head>
<body>
    <div align="center">
        <h4>你好,29快乐</h4>
        <input type="button" onclick="showPro()" value="输入框弹窗按钮"/>
        <input type="button" onclick="showAlert2()" value="提示弹窗按钮"/>
        <input type="button" onclick="showAlert()" value="确认弹窗按钮"/>
        <br><br><br>
        <span id="textSpan">
            <font style="color: green">还需要在努力呀</font>
        </span>
    </div>
</body>
from selenium import webdriver
import time
import os

driver = webdriver.Chrome()
driver.maximize_window()
url="file:///"+os.path.abspath("index.html")
driver.get(url)

# 获取alert对话框
driver.find_element_by_xpath("/html/body/div/input[2]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
time.sleep(2)
driver.quit()

(2) 确认弹窗

from selenium import webdriver
import time
import os

driver = webdriver.Chrome()
driver.maximize_window()
url="file:///"+os.path.abspath("index.html")
driver.get(url)

# 获取alert对话框
driver.find_element_by_xpath("/html/body/div/input[3]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
time.sleep(2)

driver.find_element_by_xpath("/html/body/div/input[3]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.dismiss() #选择 "取消按钮"
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗

driver.quit()

(3)输入弹框

from selenium import webdriver
import time
import os

driver = webdriver.Chrome()
url = "file:///"+os.path.abspath("index.html")
driver.get(url)

# 获取prompt()输入对话框
driver.find_element_by_xpath("/html/body/div/input[1]").click()
# 获取警告对话框内的文本
prompt = driver.switch_to.alert
time.sleep(2)
# 打印取警告对话框内的文本
print(prompt.text)

# 在输入框内输入"努力"
prompt.send_keys("努力")
time.sleep(2)
# 点击确定按钮
prompt.accept()
# 获取警告框文本
prompt2 = driver.switch_to.alert
print(prompt2.text)

prompt2.dismiss()#取消按钮
driver.quit()

10.鼠标悬停与释放

鼠标释放

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
import os

driver = webdriver.Chrome()
url="file:///"+os.path.abspath("mouse_test.html")
driver.get(url)

div = driver.find_element_by_id("div1")
# 在id属性值为'div1'的元素上,执行按下的鼠标左键,并保持
ActionChains(driver).click_and_hold(div).perform()
time.sleep(2)

# 释放按下的鼠标左键
ActionChains(driver).release(div).perform()

time.sleep(2)
driver.quit()

 鼠标悬停

from selenium import webdriver
#ActionChains 是自动化执行低级交互的一种方式,例如:鼠标移动,鼠标点按,键盘操作,文本操作等
from selenium.webdriver import ActionChains
import time
import os

driver = webdriver.Chrome()
url = "file:///"+os.path.abspath("test_001.html")
driver.get(url)

link1 = driver.find_element_by_link_text("鼠标指过来1")
link2 = driver.find_element_by_link_text("鼠标指过来2")
p= driver.find_element_by_xpath("//p")

ActionChains(driver).move_to_element(link1).perform()
time.sleep(2)
ActionChains(driver).move_to_element(p).perform()
time.sleep(2)
ActionChains(driver).move_to_element(link2).perform()
time.sleep(2)
ActionChains(driver).move_to_element(link1).perform()
time.sleep(2)

driver.quit()

以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hdoop伪分布式集群搭建

文章目录 Hadoop安装部署前言1.环境2.步骤3.效果图 具体步骤&#xff08;一&#xff09;前期准备&#xff08;1&#xff09;ping外网&#xff08;2&#xff09;配置主机名&#xff08;3&#xff09;配置时钟同步&#xff08;4&#xff09;关闭防火墙 &#xff08;二&#xff09…

Linux学习第13天:嵌入式LinuxLED驱动开发:一字一符总见情

在正式写这篇笔记前&#xff0c;有一个事情必须要说一下。昨天更新的基于API函数的字符设备驱动开发按照正常的教程来说应该在本笔记后一天更新才对。但是由于我一时的疏忽&#xff0c;跳过了本笔记。在昨天学习基于API函数的时候造成了一定程度的困扰。今天重翻教程的时候才发…

burp+IE 微信小程序抓包教程

文章目录 一、BURP里新增监听端口二、BURP导出证书三、导入证书四、IE代理设置五、小程序抓包实际测试 一、BURP里新增监听端口 找一个没用的端口&#xff0c;使用以下方式新增 二、BURP导出证书 选择刚才新增的监听端口&#xff0c;点击证书导入导出 将其存出来即可&…

Maven知识点总结

Maven 基础课程第一天 第1章 Maven 介绍 1.1什么是 Maven 1.1.1什么是 Maven Maven 的正确发音是[ˈmevən]&#xff0c;而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词语&#xff0c;代表专家、内行的意思。 一个对Maven 比较正式的定义是这么说的&#xff1…

notepad++ 配置 python 以及Anaconda中的python(已解决)

说明&#xff0c;无论是自己的电脑单独安装的python 还是Anaconda虚拟环境安装的python都是一样的。区别就是 独立安装的python 的exe文件路径添加的环境变量了&#xff0c;不需要制定它的路径直接运行下面的命令就可以&#xff0c;而Anaconda中的python.exe的文件夹并没有在虚…

endnotes插入文献突然变得格式不对,而且也不是按照正常的顺序来插入解决办法

今天插入文献突然变成了endnotes里面的文献序号&#xff0c;而且也不导入了&#xff0c;多了作者和序号信息 解决办法&#xff1a; 更新一下&#xff0c;然后在进行的导入就ok了&#xff0c;能够按照以前的格式插入了&#xff0c;序号也能自动排开&#xff0c;而且也能导入文献…

从CNN(卷积神经网络),又名CAM获取热图

一、说明 卷积神经网络&#xff08;CNN&#xff09;令人难以置信。如果你想知道它如何看待世界&#xff08;图像&#xff09;&#xff0c;有一种方法是可视化它。 这个想法是&#xff0c;我们从最后的密集层中得到权重&#xff0c;然后乘以最终的CNN层。这需要全局平均…

想要精通算法和SQL的成长之路 - 戳气球

想要精通算法和SQL的成长之路 - 戳气球 前言一. 戳气球1.1 记忆化搜索 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 戳气球 原题链接 首先我们看一下题干&#xff1a;对于超出了数组边界的&#xff0c;就当做它是一个数字为1的气球。遇到这种的&#xff0c;我们可以考…

论文解读-DeepEdit:使用纳米孔直接RNA测序对A - to - I RNA编辑事件进行单分子检测和阶段划分

DOI&#xff1a; 10.1186/s13059-023-02921-0 期刊 &#xff1a;Genome Biology 中科院分区&#xff1a;1Q 影像因子&#xff1a;12.3 作者 Longxian Chen; Liang Ou; Xinyun Jing; Yawei Kong; Bingran Xie; et al 出版日期 2023-04-17 网址&#xff1a; https://genome…

Jetpack系列 -- LiveData源码原理解析(解决黏性问题)

一、LiveData是什么&#xff1f; 注意&#xff1a;一般情况下&#xff0c;LiveData要配合ViewModel一起使用的&#xff0c;但是今天是单独使用LiveData&#xff0c;作为学习的话&#xff0c;我们可以只关注LiveData了。 LiveData是一种可观察的数据存储器类。与常规的可观察类…

python-保留小数位数的3种方法

在python实际运用中&#xff0c;需要对小数位数进行截取保留。 以下是&#xff0c;python保留小数点位数的3种方法。 方法一 方法&#xff1a;’%.nf’ % num n代表保留的小数位数&#xff0c;num表示需要截取的目标数 用法如下&#xff1a; old_num 1.23456 new_num %.2f…

[NLP] LLM---<训练中文LLama2(四)方式一>对LLama2进行SFT微调

指令精调 指令精调阶段的任务形式基本与Stanford Alpaca相同。训练方案也采用了LoRA进行高效精调&#xff0c;并进一步增加了可训练参数数量。在prompt设计上&#xff0c;精调以及预测时采用的都是原版Stanford Alpaca不带input的模版。对于包含input字段的数据&#xff0c;采…

竞赛 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

yolov5在rk3588上加速

不采用fastdeploy等三方框架&#xff0c;使用rknn-lite2或者rknpu在rk3588上加速&#xff0c;测试加速的是rknn自带的yolov5模型。 备注&#xff1a; 1.测试视频&#xff1a;多人&#xff0c;帧:3000&#xff0c;时长:2min&#xff0c;分辨率:1920x1080&#xff0c;fps:25 2…

傅里叶变换应用 (02/2):频域和相位

一、说明 到目前为止&#xff0c;在我们的讨论中&#xff0c;我已经交替使用了“傅里叶变换”和“快速傅里叶变换&#xff08;FFT&#xff09;”。在这一点上&#xff0c;值得注意的是区别&#xff01;FFT 是“离散”傅里叶变换 &#xff08;DFT&#xff09; 的有效算法实现。“…

Remix+Cloudflare Pages+D1 快速上手

我们最近听到越来越多的关于Cloudflare的服务。 我对Clouflare D1特别感兴趣&#xff0c;所以我决定研究一下。 与这次我想使用的 Remix 一起&#xff0c;我想介绍 Remix Cloudflare Pages D1 的第一步。 我只是稍微地了解一下&#xff0c;但我所做的在下面的仓库中&#…

【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作

目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象&#xff08;ndarray&#xff09; 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 4、数组广播 5、排序操作 1. np.sort() 函数 2. np.argsort() 函数 3. ndarray.sort() 方法 4. 按列或行排序 5. n…

VHDL菜鸟入门到精通之激励文件编写

目录 一、概览 二、激励文件结构 三、样例 3.1 组合逻辑 3.2 时序逻辑 四、常用编写 4.1 时钟信号 4.2 延时 4.3 循环 4.4 进程 一、概览 二、激励文件结构 VHDL激励文件结构和设计文件较为类似&#xff0c;下面以3-8译码器的激励文件对结构进行说明。 激励文件主要…

git clone报错Failed to connect to github.com port 443 after 21055 ms:

git 设置代理端口号 git config --global http.proxy http://127.0.0.1:10085 和 git config --global https.proxy http://127.0.0.1:10085 然后就可以成功git clone hugging face的数据集了 如果是https://huggingface.co/datasets/shibing624/medical/tree/main 那么…

logstash通过kafka通道采集日志信息

1.修改文件/opt/app/elk/logstash-7.5.1/config.d/config1.conf&#xff0c;在input下添加kafka采集配置 #192.168.128.130:9103:kafka地址 #topics:主题 kafka {bootstrap_servers > ["192.168.128.130:9103"]group_id > "logstash"topics > [&…