当前位置: 首页 > news >正文

如何使用 Python+selenium 进行 web 自动化测试?

Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,比如点击、输入、选择等等。它支持多种浏览器,包括Chrome、Firefox、Safari等等,并且可以在多个平台上运行。

安装和配置Selenium

在使用Selenium之前,需要安装Selenium和相应的浏览器驱动程序。这里我们以Chrome浏览器为例,介绍如何安装和配置Selenium。

首先,我们需要安装Selenium库。可以通过以下命令来安装:

pip install selenium

接下来,我们需要下载Chrome浏览器驱动程序。可以从ChromeDriver官网 ↗上下载适合自己的版本。下载完成后,将驱动程序所在的路径添加到环境变量中。

from selenium import webdriver# 指定驱动程序
所在路径
driver_path = '/path/to/chromedriver'# 创建Chrome浏览器实例
browser = webdriver.Chrome(executable_path=driver_path)# 打开网页
browser.get("https://www.baidu.com")

上面的代码中,我们首先导入了webdriver模块,并指定了Chrome浏览器驱动程序所在的路径。接下来,我们创建了一个Chrome浏览器实例,并打开了百度首页。

模拟用户操作

接下来,我们将介绍如何使用Selenium模拟用户在浏览器中的操作。比如,我们可以使用Selenium来自动登录某个网站,或者自动填写表单等等。

点击元素

要点击一个元素,可以使用click()方法。比如,我们可以点击一个链接:

# 点击百度首页的新闻链接
news_link = browser.find_element_by_link_text("新闻")
news_link.click()

上面的代码中,我们首先找到了百度首页中的新闻链接,然后使用click()方法来点击它。

输入文本

要输入文本,可以使用send_keys

()方法。比如,我们可以在搜索框

中输入关键字:

# 在百度搜索框中输入关键字
search_box
 = browser.find_element_by_id("kw")
search_box.send_keys("Python")

上面的代码中,我们首先找到了百度搜索框,然后使用send_keys()方法来输入关键字。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

选择元素

有时候,我们需要从下拉列表或者单选框中选择一个选项。可以使用select()方法来实现这个功能。比如,我们可以选择一个下拉列表中的选项:

from selenium.webdriver.support.ui import Select# 选择一个下拉列表中的选项
select = Select(browser.find_element_by_name
("select"))
select.select_by_value("value")

上面的代码中,我们首先找到了一个下拉列表,然后创建了一个Select对象。接下来,我们使用select_by_value

()方法来选择一个选项。

等待元素

有时候,我们需要等待某个元素出现再进行操作。可以使用WebDriverWait类来实现这个功能。比如,我们可以等待一个元素出现后再点击它:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待一个元素出现后再点击它
element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "element_id
"))
)
element.click()

上面的代码中,我们使用WebDriverWait类来等待一个元素的出现,然后使用click()方法来点击它。

实战应用

在实际项目中,我们可以使用Selenium来完成一些重复性的任务,比如自动化测试

、数据采集等等。下面,我们将介绍如何使用Selenium来爬取某个网站的数据。

分析网站结构

在爬取网站数据之前,我们需要先了解网站的结构。比如,我们可以使用Chrome浏览器的开发者工具来查看网站的HTML代码和CSS样式。

爬取数据

假设我们要爬取某个电商网站的商品数据,包括商品名称、价格、销量等等。我们可以通过以下步骤来实现:

  1. 打开网站,并搜索关键字;
  2. 获取搜索结果页面中的商品列表;
  3. 遍历商品列表,获取每个商品的名称、价格、销量等信息;
  4. 将商品信息保存到文件中。

下面是代码示例:

# 打开网站,并搜索关键字
browser.get
("https://www.example.com/")
search_box = browser.find_element_by_id("search_box")
search_box.send_keys("Python")
search_button = browser.find_element_by_id("search_button")
search_button.click()# 获取搜索结果页面中的商品列表
product_list = browser.find_elements_by_class_name("product")# 遍历商品列表,获取每个商品的名称、价格、销量等信息
for product in product_list:name = product.find_element_by_class_name("name").textprice = product.find_element_by_class_name("price").textsales = product.find_element_by_class_name("sales").text# 将商品信息保存到文件中with open("products.txt", "a") as f:f.write(f"{name}\t{price}\t{sales}\n")

上面的代码中,我们首先打开了某个电商网站,并搜索了关键字。然后获取搜索结果页面中的商品列表,遍历商品列表,获取每个商品的名称、价格、销量等信息,并将商品信息保存到文件中。

技术总结

在本篇文章中,我们介绍了如何使用Python的Selenium库进行Web自动化,并且演示了如何将它应用于实际项目中。如果你想要提高工作效率,或者想要学习如何进行自动化测试、数据采集等等,那么Selenium是一个非常好的选择。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

相关文章:

如何使用 Python+selenium 进行 web 自动化测试?

Selenium是一个自动化测试工具,它可以模拟用户在浏览器中的操作,比如点击、输入、选择等等。它支持多种浏览器,包括Chrome、Firefox、Safari等等,并且可以在多个平台上运行。 安装和配置Selenium 在使用Selenium之前,…...

约瑟夫问题

约瑟夫问题 题目描述 n n n 个人围成一圈,从第一个人开始报数,数到 m m m 的人出列,再由下一个人重新从 1 1 1 开始报数,数到 m m m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。…...

文件管理方法:利用文件大小进行筛选,高效移动文件至目标文件夹

在日常工作中,文件管理是一项至关重要的任务。为了更高效地管理文件,可以利用文件大小进行筛选,并将文件快速移动至目标文件夹。接下来一起来看看云炫文件管理器如何利用文件大小进行筛选,以及如何高效移动文件至目标文件夹的方法…...

python报错:TypeError: Descriptors cannot be created directly.

问题 报错提示: TypeError:不能直接创建描述符。 如果此调用来自 _pb2.py 文件,则您生成的代码已过期,必须使用 protoc > 3.19.0 重新生成。 如果您不能立即重新生成原型,其他一些可能的解决方法是: 1.…...

Linux 内核调试

文章目录 一、方法论 一、方法论 qemu 虚拟机 Linux内核学习 Linux 内核调试 一:概述 Linux 内核调试 二:ubuntu20.04安装qemu Linux 内核调试 三:《QEMU ARM guest support》翻译 Linux 内核调试 四:qemu-system-arm功能选项整…...

Prometheus-AlertManager 邮件告警

环境,软件准备 本次演示环境,我是在虚拟机上安装 Linux 系统来执行操作,以下是安装的软件及版本: System: CentOS Linux release 7.6Docker: 24.0.5Prometheus: v2.37.6Consul: 1.6.1 docker 安装prometheus,alertmanage,说明一下这里直接将…...

Volcano Controller控制器源码解析

Volcano Controller控制器源码解析 本文从源码的角度分析Volcano Controller相关功能的实现。 本篇Volcano版本为v1.8.0。 Volcano项目地址: https://github.com/volcano-sh/volcano controller命令main入口: cmd/controller-manager/main.go controller相关代码目录: pkg/co…...

开源协议简介和选择

软件国产化已经提到日程上了,先来研究一下开源协议。 引言 在追求“自由”的开源软件领域的同时不能忽视程序员的权益。为了激发程序员的创造力,现今世界上有超过60种的开源许可协议被开源促进组织(Open Source Initiative)所认可…...

大创项目推荐 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

pod的环节

pod 是k8s当中最小的资源管理组件 Pod也是最小化运行容器化的应用的资源管理对象 Pod是一个抽象化的概念,可以理解为一个或多个容器化的集合 在一个pod当中运行一个容器,是最常用的方式 在一个pod当中同时运行多个容器,在一个pod当中可以…...

Unity | Shader基础知识番外(向量数学知识速成)

目录 一、向量定义 二、计算向量 三、向量的加法(连续行走) 四、向量的长度 五、单位向量 六、向量的点积 1 计算 2 作用 七、向量的叉乘 1 承上启下 2 叉乘结论 3 叉乘的计算(这里看不懂就百度叉乘计算) 八、欢迎收…...

一个小白的微不足道的见解关于未来

随着科技的不断发展,IT行业日益壮大,运维工程师在其中扮演着至关重要的角色。他们负责维护和管理企业的技术基础设施,确保系统的正常运行。然而,随着技术的进步和行业的变化,运维工程师的未来将面临着一系列挑战和机遇…...

图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

一、图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次。(连通图与非连通图) 二、深度优先遍历(DFS); 1、访问指定的起始顶点; 2、若当前访问的顶点…...

抖店做不起来?新手常见起店失败问题总结,看下你中了几条?

我是王路飞。 能看到这篇文章的,肯定是处境符合标题内容了。 抖店的门槛很低,运营思路其实也不算难,但就是很多新手做不起来。 这中间,可能跟平台、项目没什么关系,而是跟你自己有关系,走错了方向&#…...

【每日面试题】精选java面试题之redis

Redis是什么?为什么要使用Redis? Redis是一个开源的高性能键值对存储数据库。它提供了多种数据结构,包括字符串、列表、集合、有序集合、哈希表等。Redis具有快速、可扩展、持久化、支持多种数据结构等特点,适用于缓存、消息队列…...

OSCP 靶场 - Vault

端口扫描 nmap nmap -O 192.168.162.172 smb枚举 smbmap(kali自带) //枚举GUEST用户可以使用的目录 smbmap -u GUEST -H 192.168.162.172 NTLMrelay—smbrelay 1.制作钓鱼文件 使用GitHub - xct/hashgrab: generate payloads that force authentication against an attacker…...

uniapp子组件向父组件传值

目录 子组件向父组件传值子组件1子组件2 父组件最后 子组件向父组件传值 子组件1 <template><view class"content"><view v-for"(item,index) in list" :key"index">{{item}}</view></view> </template>&…...

过滤特殊 微信昵称

$nickName preg_replace(/[\xf0-\xf7].{3}/, , $userData[nickName]);...

LLM、AGI、多模态AI 篇一:开源大语言模型简记

文章目录 系列开源大模型LlamaChinese-LLaMA-AlpacaLlama2-ChineseLinlyYaYiChatGLMtransformersGPT-3(未完全开源)BERTT5QwenBELLEMossBaichuan...

微信小程序中获取用户当前位置的解决方案

微信小程序中获取用户当前位置的解决方案 1 概述 微信小程序有时需要获取用户当前位置&#xff0c;以便为用户提供基于位置信息的服务&#xff08;附近美食、出行方案等&#xff09;。 获取用户当前位置的前提是用户手机需要打开 GPS 定位开关&#xff1b;其次&#xff0c;微…...

Vue3-35-路由-路由守卫的简单认识

什么是路由守卫 路由守卫&#xff0c;就是在 路由跳转 的过程中&#xff0c; 可以进行一些拦截&#xff0c;做一些逻辑判断&#xff0c; 控制该路由是否可以正常跳转的函数。常用的路由守卫有三个 &#xff1a; beforeEach() : 前置守卫&#xff0c;在路由 跳转前 就会被拦截&…...

制药企业符合CSV验证需要注意什么?

在制药行业中&#xff0c;计算机化系统验证&#xff08;CSV&#xff09;是确保生产过程的合规性和数据完整性的关键要素。通过CSV验证&#xff0c;制药企业可以保证其计算机化系统的可靠性和合规性&#xff0c;从而确保产品质量和患者安全。然而&#xff0c;符合CSV验证并不是一…...

再谈动态SQL

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…...

【数据结构】树

一.二叉树的基本概念和性质&#xff1a; 1.二叉树的递归定义&#xff1a; 二叉树或为空树&#xff0c;或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成 2.二叉树的特点&#xff1a; &#xff08;1&#xff09;每个结点最多只有两棵子树&#xff0…...

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网&#xff08;亲测非必须&#xff0c;可加快响应速度&#xff09;访问Discord官方网址&#xff1a;https://discord.com 选择“在您的浏览器中打开Discord” 然后&#xff0c;注册帐号、购买套餐等&#xff0c;在此不做缀述。…...

对比 PyTorch 和 TensorFlow:选择适合你的深度学习框架

目录 引言 深度学习在各行业中的应用 PyTorch 和 TensorFlow 简介 PyTorch&#xff1a;简介与设计理念 发展历史和背景 主要特点和设计理念 TensorFlow&#xff1a;简介与设计理念 发展历史和背景 主要特点和设计理念 PyTorch 和 TensorFlow 的重要性 Pytorch对比Te…...

Oracle笔记-查看表已使用空间最大空间

目前以Oracle18c为例&#xff0c;主要是查这个表USER_SEGMENTS。 在 Oracle 18c 数据库中&#xff0c;USER_SEGMENTS 是一个系统表&#xff0c;用于存储当前用户&#xff08;当前会话&#xff09;拥有的所有段的信息。段是 Oracle 中分配存储空间的逻辑单位&#xff0c;用于存…...

大数据HCIE成神之路之特征工程——特征选择

特征选择 1.1 特征选择 - Filter方法1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析1.1.1.4 实验思路 1.1.2 实验操作步骤 1.2 特征选择 - Wrapper方法1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析1.2.1.4 实验思路 1.2.2 实验操…...

python 正则-常见题目

1、邮箱 print(re.findall(r[\w-][\w-]\.[\w-], weidianqq.com))2、身份证号 xxxxxx yyyy MM dd 375 0 十八位 print(re.findall(r(?:18|19|(?:[23]\d))\d{2}, 2010)) # 年print(re.findall(r(?:0[1-9])|10|11|12, 11)) # 月print(re.findall(r(?:[0-2][1-9])|10|20|30|3…...

解析:Eureka的工作原理

Eureka是Netflix开源的一个基于REST的的服务发现注册框架&#xff0c;它遵循了REST协议&#xff0c;提供了一套简单的API来完成服务的注册和发现。Eureka能够帮助分布式系统中的服务提供者自动将自身注册到注册中心&#xff0c;同时也能够让服务消费者从注册中心发现服务提供者…...

网站栏目做树形结构图/重庆seowhy整站优化

Docker的C/S模式&#xff1a; 用户通过Docker的CLI客户端向Docker守护进程发送指令&#xff0c;然后Docker守护进程将执行结果通过Docker的CLI客户端显示给用户。 Docker也提供了与守护进程通信的API&#xff0c;叫做RemoteAPI。RemoteAPI在复杂的情况下支持使用STDIN/STDOUT/S…...

网站建设的主要特征/长春网站建设开发

go get github.com/garyburd/redigo/redis import "github.com/garyburd/redigo/redis" 连接 Conn接口是与Redis协作的主要接口&#xff0c;可以使用Dial,DialWithTimeout或者NewConn函数来创建连接&#xff0c;当任务完成时&#xff0c;应用程序必须调用Close函数来…...

携程网站建设目的/在哪个平台做推广比较好

简介&#xff1a;SaltStack是 一个服务器基础架构集中化管理平台&#xff0c;具备配置管理、远程执行、监控等功能&#xff0c;一般可以理解为简化版的puppet和加强版的func。SaltStack基 于Python语言实现&#xff0c;结合轻量级消息队列&#xff08;ZeroMQ&#xff09;与Pyth…...

网站开发要多钱/企业网站推广的方法有

学了下bitset用法&#xff0c;从网上找的一些bitset用法&#xff0c;并从中调出一些常用的用法。 构造函数bitset<n> b; b有n位&#xff0c;每位都为0.参数n可以为一个表达式.如bitset<5> b0;则"b0"为"00000";bitset<n> b(unsigned long…...

织梦云建站系统/建网站需要哪些步骤

我发现我在工作中有一个毛病&#xff0c;只要工作一来就是一堆的时候&#xff0c;我就感觉这么多&#xff0c;怎么安排捏&#xff1f;有点不知所措&#xff01;然后手头上的工作就停下来了&#xff0c;就觉得好忙好忙&#xff0c;然后就好乱好乱&#xff0c;后来一想不着急我后…...

网站模版好建设吗/seo专业优化方法

zabbix 使用进阶&#xff08;五&#xff09;概述&#xff1a;本章内容具体如下&#xff1a;自定义key不带参数&#xff1b;自定义key可传递参数&#xff1b;在agent端自定义可传递参数的key&#xff0c;来获取nginx的状态信息&#xff1a;基于SNMP监控的创建和和使用&#xff1…...