selenium模拟!看这篇就够了

news2024/10/4 16:32:12

介绍

Selenium是一个用于自动化Web浏览器测试的开源工具,它支持多种Web浏览器(如Google Chrome、Firefox、Safari等)和操作系统(如Windows、Mac和Linux)。Selenium可以模拟用户在Web浏览器中的行为,例如点击链接、填写表单、提交数据等。

使用方法

加载webDriver

这里以Chrome为例,根据自己现有浏览器的版本去找到对应的版本号,去对应官网找到对应的webdriver

  • Chrome非最新版本的webdriver下载
  • Chrome最新版本官方webdriver下载
  • 其他博主整理的各类镜像源
    这里提供一个思路,本人使用Chrome为例子,具体的版本如下所示(本人的版本号为114.0.5735.135),一般点分法前面三位匹配即可。在这里插入图片描述

安装selenium

下载完之后用以下命令具体镜像源为清华镜像源,而且安的包为selenium。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

使用selenium,以Chrome为例

将下载下来的driver.exe放置在跟当前py文件所在的同一个目录

from selenium import webdriver
# 设置 Chrome 浏览器 Driver 的路径
driver_path = "./chromedriver"
# 创建 Chrome 浏览器的 WebDriver 对象
driver = webdriver.Chrome(executable_path=driver_path)
# 打开一个网页
driver.get("https://www.example.com")
# 关闭浏览器窗口
driver.quit()

根据属性(class/id/css)去定位条件

最常用的定位条件为IDXPath定位,具体的方法如下所示。

# 通过 ID 定位元素
element = driver.find_element_by_id("element_id")
# 通过 Name 定位元素
element = driver.find_element_by_name("element_name")
# 通过 Class Name 定位元素
element = driver.find_element_by_class_name("element_class_name")
# 通过 Tag Name 定位元素
element = driver.find_element_by_tag_name("element_tag_name")
# 通过 XPath 定位元素
element = driver.find_element_by_xpath("xpath_expression")
# 通过 CSS Selector 定位元素
element = driver.find_ele
ment_by_css_selector("css_selector")

具体的模拟事件

具体常用的为根据上述的定位条件定位到某个特定元素模拟点击/输入/提交表单等操作。

# click():模拟鼠标左键单击事件,可以用于点击按钮、链接等元素。
element = driver.find_element_by_id("element_id")
element.click()
# send_keys():模拟键盘输入事件,可以用于输入文本、按键等操作。
element = driver.find_element_by_id("element_id")
element.send_keys("text")
# clear():清空元素的文本内容。
element = driver.find_element_by_id("element_id")
element.clear()
# submit():模拟提交表单事件,可以用于提交表单数据
form = driver.find_element_by_id("form_id")
form.submit()
# get_attribute():获取元素的属性值。
element = driver.find_element_by_id("element_id")
value = element.get_attribute("attribute_name")
# is_displayed():判断元素是否显示在页面中。
element = driver.find_element_by_id("element_id")
if element.is_displayed():
	# do something
# is_selected():判断复选框或单选按钮是否被选中。
element = driver.find_element_by_id("element_id")
if element.is_selected():
    # do something
 element = driver.find_element_by_id("element_id")
 # is_enabled():判断元素是否可用。
if element.is_enabled():
    # do something

用JavaScript处理对应事件

  • 点击事件

首先通过元素 ID 定位元素,然后使用 execute_script() 方法执行 JavaScript 代码。JavaScript 代码中的 arguments[0] 表示传入的第一个参数(一般默认都是argument[0]),也就是要点击的元素。.click() 表示执行点击操作。需要注意的是,这里的 click() 不是 Python 中的 click() 方法,而是JavaScript 中的click方法。

优点:可以解决一些 Selenium 中 click() 方法无法点击的问题,比如点击隐藏或不可见的元素。同时,使用 JavaScript 还可以实现其他一些高级操作,比如修改元素的属性值、滚动页面等。

element = driver.find_element_by_id("element_id")
driver.execute_script("arguments[0].click();", element)
  • 滑动窗口

第一行代码使用 execute_script() 实现了在竖直方向下滑动窗口 500 像素的操作。第二行代码使用了 find_element_by_id() 方法定位要滑动到的元素。然后使用 execute_script() 方法执行 JavaScript 代码,调用了 scrollIntoView() 方法将元素滑动到窗口可见区域。

需要注意的是,scrollBy() 方法可以滑动指定的像素数,也可以使用负数实现反向滑动;scrollIntoView() 方法可以将元素滑动到窗口中央,也可以使用参数控制滑动的位置。

# 执行 JavaScript 滑动窗口
driver.execute_script("window.scrollBy(0, -500);")
# 滑动到指定元素的位置
element = driver.find_element_by_id("element_id")
driver.execute_script("arguments[0].scrollIntoView();", element)

selenium对象的属性以及返回值

  • title 属性:返回当前页面的标题。title = driver.title
  • current_url 属性:返回当前页面的 URL。url = driver.current_url
  • page_source 属性:返回当前页面的源代码。page_source 属性:返回当前页面的源代码。
  • window_handles 属性:返回当前所有打开的窗口句柄。window_handles 属性:返回当前所有打开的窗口句柄。handle可以理解为调用的窗口,有多少个handle有多少个窗口
  • switch_to.window() 方法:切换到指定的窗口句柄。switch_to.window() 方法:切换到指定的窗口句柄。
  • switch_to.frame() 方法:切换到指定的 iframe。switch_to.frame() 方法:切换到指定的 iframe。

SetOption对象设置

具体根据自己需要模拟的UA伪装和配置代理服务器去处理反爬虫。

ChromeOptions 是 Selenium WebDriver 中用于设置 Chrome 浏览器选项的类。通过 ChromeOptions 可以设置启动 Chrome 浏览器时的一些参数和选项,比如添加命令行参数、设置浏览器窗口大小、设置代理等。

  • –headless:启用无头模式,即在后台运行 Chrome 浏览器。
  • –window-size:设置浏览器窗口大小,语法为 “–window-size=宽度,高度”,例如 “–window-size=1920,1080”。
  • –disable-infobars:禁用 Chrome 浏览器的通知栏。
  • –disable-extensions:禁用扩展程序。
  • –incognito:启用隐身模式。
  • –user-data-dir:设置用户数据目录,用于保存浏览器的历史、缓存、Cookie 等信息。
  • –proxy-server:设置代理服务器,语法为 “–proxy-server=代理服务器地址:端口号”。

具体代码如下所示

from selenium import webdriver
# 创建 ChromeOptions 对象
options = webdriver.ChromeOptions()
# 添加命令行参数
options.add_argument("--headless")
options.add_argument("--disable-infobars")
options.add_argument("--window-size=1920,1080")
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3")
# 设置代理服务器
options.add_argument("--proxy-server=http://127.0.0.1:8080")
# 添加 cookie
cookie = {'name': 'cookie_name', 'value': 'cookie_value'}
driver.add_cookie(cookie)
# 创建 ChromeDriver 对象
driver = webdriver.Chrome(options=options)
# 打开网页并操作
driver.get("https://www.example.com")
# ...

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

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

相关文章

ssm汉语言学习应用系统APP -计算机毕设 附源码80400

ssm汉语言学习应用系统APP 摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布,为此,本人开发了一个基于Android模式的汉语言学习应用系统。 对于本汉语言学习应用系统的设计来说&#x…

十、云尚办公系统-员工端审批

云尚办公系统:员工端审批 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!&…

回收站删除的文件怎么恢复?4招快速搞定!

求救求救!我刚刚一个不小心就把回收站清空了!但是我回收站里还有需要恢复的文件,这次一不小心清空了回收站,我的重要文件还有机会找回来吗?希望大家帮帮我! 对于部分朋友来说,回收站可能不仅仅是一个垃圾文…

Selenium 不开启浏览器页面执行测试用例

实际工作中会遇到不开启浏览器页面来执行测试用例的情况,可以通过ChromeOptions来实现 ChromeOptions是chromedriver支持的浏览器启动选项 Google 针对 Chrome 浏览器 59版 新增加的Chrome-headless 模式,可以在不打开UI界面的情况下使用 Chrome 浏览器…

【Java高级编程】多线程

多线程 1、基本概念:程序、进程、线程1.1、程序1.2、进程1.3、线程1.4、单核CPU和多核CPU的理解1.5、并行与并发1.6、使用多线程的优点1.7、何时需要多线程 2、线程的创建和使用2.1、创建多线程的方式一:继承Thread类2.2、Thread类的有关方法2.3、线程的…

选择高考志愿:聚焦计算机科学与技术,规避土木工程

选择高考志愿:聚焦计算机科学与技术,规避土木工程 高考季已至,各地高考成绩陆续公布,许多毕业生和家长开始面临疑惑:如何填报志愿、选专业还是选学校、什么专业好就业?张雪峰曾提到:“普通家庭…

机房动环是什么?内附最新机房动环监控系统报价

伴随着计算机信息化的发展和物联网的广泛运营,为了减少人员维护成本,实现智能化监控管理,机房动环监控系统逐渐被应用开来。通过一套完整的机房动环监控系统,一个偌大的机房就可以实现24小时无人值守。机房动环是什么?…

【Redis】介绍及安装

🎯简介 Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)存储数据库,它支持多种数据类型,如字符串、列表、集合、哈希表和有序集合等。 Redis通常用于缓存、消息队列、实时…

移动设备管理 (MDM)工具

移动设备管理 (MDM)可帮助管理员通过无线方式管理和保护组织的移动设备群,而不会影响最终用户体验。现代 MDM 解决方案还可以控制应用程序、内容和安全性,因此员工可以无后顾之忧地在托管设备上工作。移动设备管理软件可有效管理个…

华为HUAWEI MateBook D 2018 黑苹果Monterey 12.6.5的安装过程

HUAWEI MateBook D 2018 黑苹果系统的安装 HUAWEI MateBook D 2018版,配置列表如下:安装Monterey 12.6.5流程1. 打开balenaEtcher,选择好系统镜像和U盘,将镜像刻录到U盘中,点击Flash等待刻录完成;2. 使用DiskGenius将下…

vue3.2+vite+elementPlus,build引入CDN依赖包,提升打包速率,vite-plugin-cdn-import

一.概述 使用CDN的好处缓解服务器的压力,将首屏加载时的请求分摊给其它的服务器优化打包后verdor.js过大问题加快首屏加载速度加快打包速度尤其是Vue3新的Tree-Shaking技术,只打包需加载的模块module,搭配CDN后如虎添翼! 二.CDN网站分享 根据需要自行切换相关CDN 依赖引用并…

【easyswoole代码自动生成crud】我写了一个控制器用来生成增删改查

easyswoole代码自动生成crud 根据表生成模型和控制器根据表生成模型根据表生成控制器控制器模板核心控制器代码curd.php 根据表生成模型和控制器 会在 App/Model目录下生成驼峰方式命名的模型文件 会在App/HttpController/Api 目录下生成驼峰方式命名的控制文件 curl http:lo…

React V6分环境打包

功能背景 例如想要在react也要实现不同环境使用不同的api接口地址这样的想法,那么就需要根据命令自动区分环境了。 代码实现 比如我这又三种环境,那么创建三个文件,如图: 分别是dev:开发环境,formal:UAT环境…

【力扣】DP:1186. 删除一次得到子数组最大和

【力扣】DP:1186. 删除一次得到子数组最大和 文章目录 【力扣】DP:1186. 删除一次得到子数组最大和1. 题目描述2. 题解2.1 不可行2.2 DP 参考 1. 题目描述 给你一个整数数组,返回它的某个非空子数组(连续元素)在执行一…

画一个足球场,尺寸已标注好

画一个有标注的足球场 上面是一个带有标注的足球场俯视图,下面是实现代码。 import matplotlib.pyplot as plt from matplotlib.patches import Arc, Circle, Rectangle# 创建一个灰色背景的子图 fig, ax plt.subplots(facecolorgrey)# 设置x轴和y轴的范围 ax.set…

基于PaddleOCR的工件字符识别

目录 1.工业工件字符识别 1.2 难点 1.3 基于深度学习的OCR技术 2.基于Paddleocr的字符识别 🌟 特性 2.1 PP-OCRv3介绍 3.本文工件字符识别数据集介绍 4.PaddleOCR工件字符 4.1 字符检测 1.工业工件字符识别 在复杂的工业制造环境中,为了更好的追踪…

SAP-MM未清PO调取

SAP未清PO调取 SAP查询open PO(未清采购清单)可以通过ME2M(PO per material),ME2L(PO per vendor),ME2N(PO per document number)进行查询。 未清订单一般指未完成收货或者已收货未完成发票校验的订单,在输入以上任一事务代码之后,在选择参数Selection Parameters…

十二、项目总结

项目总结 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!! 文章目录 项目总结1…

在 Jetpack Compose 中创建 Drawer

Jetpack Compose 是一个现代的构建 Android UI 的工具集,它使得构建 UI 变得更加简单快速。在本篇博客中,我们将讨论如何在 Jetpack Compose 中创建 Drawer,也就是我们常见的侧边抽屉。 什么是 Drawer? Drawer 是一个提供导航选项…

【C++学习】STL容器——string

一、STL简介 1.1 什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 1.2 STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室…