Python+Selenium教程

news2024/12/23 8:23:41

Python+Selenium教程

  • 准备工作
    • 1.安装selenium
    • 2.下载浏览器驱动
    • 3.测试执行
  • 元素定位
  • 控制浏览器操作
    • 控制浏览器窗口大小
    • 浏览器后退前进
    • 浏览器刷新
  • Webelement常用方法
    • 点击和输入
    • 提交
    • 其他
  • 鼠标操作
  • 键盘操作
  • 获取断言信息
  • 等待页面加载完成
    • 显示等待
    • 隐式等待

Selenium是一个用电脑模拟人操作浏览器网页,可以实现自动化。以下是详细教程。

准备工作

1.安装selenium

pip install selenium

或者直接在pycharm中打开项目,点击file—>settings—>Project---->Python Interpreter点击“+”号,在弹出的框框里面输入selenium进行搜索下载安装。参考见下图:
在这里插入图片描述

2.下载浏览器驱动

Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver ,CNPM Binaries Mirror (npmmirror.com), taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
我使用的是谷歌浏览器,因此我下载的是ChromeDriver,需要将下载的压缩包放到pyhton项目下的\venv\Scripts目录下,例如我的放置路径为:F:\hf\pythonProject2\venv\Scripts
注意
随着浏览器的更新,对应的webdriver也应该随着一起更新,否则无法正常使用。更新webdriver就是再从官网上下载对应你浏览器版本的webdriver,再次解压,按照上述操作再进行一次就OK啦。

3.测试执行

执行下述代码可测试执行:

from selenium import webdriver


driver = webdriver.Firefox()   # Firefox浏览器
# driver = webdriver.Firefox("驱动路径")

driver = webdriver.Chrome()    # Chrome浏览器

driver = webdriver.Ie()        # Internet Explorer浏览器

driver = webdriver.Edge()      # Edge浏览器

driver = webdriver.Opera()     # Opera浏览器

driver = webdriver.PhantomJS()   # PhantomJS

# 打开网页
driver.get(url) # 打开url网页 比如 driver.get("http://www.baidu.com")

在这里插入图片描述
出现上图,运行代码使有网页弹出,证明配置成功。如果出现弹出的网页一闪而过的现象,先不要慌,这可能是你的elenium版本过高的原因,不妨试试下载一个较低的selenium版本,再次进行测试。本人用的是4.1.1版本的,不会出现闪退现象。

元素定位

#提前导包
from selenium.webdriver.common.by import By
find_element_by_id()
# 新的写法
find_element(by=By.ID,value="")
find_element_by_name()
# 新的写法
find_element(by=By.NAME,value="")
find_element_by_class_name()
# 新的写法
find_element(by=By.CLASS_NAME,value="")
find_element_by_tag_name()
# 新的写法
find_element(by=By.TAG_NAME,value="")
find_element_by_link_text()
# 新的写法
find_element(by=By.LINK_TEXT,value="")
find_element_by_partial_link_text()
# 新的写法
find_element(by=By.PARTIAL_LINK_TEXT,value="")
find_element_by_xpath()
# 新的写法
find_element(by=By.XPATH,value="")
find_element_by_css_selector()
# 新的写法
find_element(by=By.CSS_SELECTOR,value="")

element变成elements就是找所有满足的条件,返回数组。

想要使用Xpath直接在浏览器中复制即可,详细见下图:
在这里插入图片描述

控制浏览器操作

控制浏览器窗口大小

driver.set_window_size(480, 800)

浏览器后退前进

# 后退 
driver.back()

# 前进 
driver.forward()

浏览器刷新

driver.refresh() # 刷新

Webelement常用方法

点击和输入

driver.find_element_by_id("kw").clear() 
# 清楚文
driver.find_element_by_id("kw").send_keys("selenium")
 # 模拟按键输入 
 driver.find_element_by_id("su").click() 
 # 单机元素

提交

可以在搜索框模拟回车操作

search_text = driver.find_element_by_id('kw') search_text.send_keys('selenium') search_text.submit()

其他

size: 返回元素的尺寸。

text: 获取元素的文本。

get_attribute(name): 获得属性值。

is_displayed(): 设置该元素是否用户可见。

鼠标操作

在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

ActionChains 类提供了鼠标操作的常用方法:

perform(): 执行所有 ActionChains 中存储的行为;
context_click(): 右击;
double_click(): 双击;
drag_and_drop(): 拖动;
move_to_element(): 鼠标悬停。
例如:

from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")

# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()

键盘操作

以下为常用的键盘操作:

send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
from selenium.webdriver.common.keys import Keys
# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)

获取断言信息

title = driver.title # 打印当前页面title
now_url = driver.current_url # 打印当前页面URL
user = driver.find_element_by_class_name('nums').text # # 获取结果数目

等待页面加载完成

显示等待

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

element = WebDriverWait(driver, 5, 0.5).until(
                      EC.presence_of_element_located((By.ID, "kw"))
                      )
element.send_keys('selenium')
driver.quit()

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为False。
在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。

隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

from selenium import webdriver
driver = webdriver.Firefox()    
driver.implicitly_wait(10) # seconds    
driver.get("http://somedomain/url_that_delays_loading")    
myDynamicElement = driver.find_element_by_id("myDynamicElement") 

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

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

相关文章

验证知识点总结

1、常用总线对比 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) 高…

521之虚拟女友-程序猿的你不认领一个?

520已经来了,你准备好迎接这一浪漫的日子了吗? 作为知否AI问答向你推荐一个值得期待的礼物——知否AI虚拟女友。目前人们对虚拟女友的需求越来越高,而知否AI虚拟女友正是满足这一需求的最佳选择。 01 — 知否AI虚拟女友 作为一款基于ChatG…

Compose For Desktop 实践:使用 Compose-jb 做一个时间水印助手

前言 在我之前的文章 在安卓中实现读取Exif获取照片拍摄日期后以水印文字形式添加到照片上 中,我们已经实现了在安卓端读取 Exif 信息后添加文字水印到图片上。 也正如我在这篇文章中所说的,其实这个需求使用手机来实现是非常不合理的,一般…

CPU和显卡才是最抗热的?

高温是电脑蓝屏和掉帧的罪魁祸首,虽然硬件有了保护不会因为高温烧坏,但当你的工作进行到一半时突然蓝屏,或是游戏中的关键时刻突然掉帧,你的内心肯定是崩溃的,那么电脑中的硬件温度应该控制在多少度呢? 首先…

二进制部署高可用Kubernetes集群 (成功) 看报错

SUMMARY 参考网上的教程和网课,进行二进制高可用Kubernetes部署。并对整个过程和报错进行简单记录。 架构图 设备规划 序号名字功能VMNET 1备注 1备注 2备注 3 备注 4备注 50orgin界面192.168.164.10haproxykeepalived192.168.164.2001reporsitory仓库192.168.1…

〖大学生·技术人必学的职业规划白宝书 - 优质简历篇②〗- 面试官所青睐的优秀简历是什么样的?

历时18个月,采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴,该专栏有你想要的职业规划、简历、面试的答案。说明:该文属于 大学生技术人职业规划白宝书 专栏,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

【OpenCv • c++】形态学技术操作 —— 顶帽操作与黑帽操作

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:【OpenCV • c】计算机视觉🌈 若有帮助,还请关注➕点赞➕收藏&#xff…

Ae 入门系列之十一:抠像

抠像,英文为 Keying,故也被称为“键控”。在早期电视节目制作中,意思是吸取画面中的某一颜色并使得此颜色相关区域成为透明,从而保留所需要的内容。 我们通常称要抠出(要保留)的主体为前景 Foreground&…

进程间通信-管道

文章目录 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信分类 2. 管道2.1 什么是管道2.2 站在文件描述符角度-深度理解管道2.2.1 具体通信的过程 2.3 匿名管道2.4 代码实现 3. 进程控制4. 管道读写规则5. 管道特点6. 命名管道6.1 创建一个命名管道6.2 代码实现 1. 进程间通…

索引的底层数据结构,讲讲B+ 树,B树

B 树的变种。 B树:所有节点(非叶子节点 叶子节点),都存储真正的行数据,所以一个数据页能存储的数量,相较于 B 树,就少很多。 B 树: ● 只有叶子节点存储具体的行数据,非…

【进阶】C 语言表驱动法编程原理与实践

数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据结构,而不是算法。——Rob Pike 目录 说明 概念提出 查表方式 直接查找 索引查找 分段查找 实战示例 字符统计 月天校验 名称构造 值名…

Python——sentenceSimilarity 的简单demo(测试句子相似度)

一、sentenceSimilarity 是什么? sentenceSimilarity 属于机器学习的领域 Python 中的 sentenceSimilarity 库是一个用于计算句子相似度的工具库,主要用于自然语言处理相关的应用中。该库支持多种模型计算句子相似度,包括 TF-IDF、LSI、LDA 等…

MySQL进阶篇(三)

七.MySQL管理 7.1 系统数据库 Mysql数据库安装完成后,自带了一下四个数据库,具体作用如下: 7.2 常用工具 7.2.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 -e选项可以在Mysql客户端执行SQL语句,而…

【Linux】Linux环境基础开发工具使用(yum和vim)

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:Linux ⭐代码仓库:Linux 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们的支持是我…

NSFW 图片分类

NSFW指的是 不适宜工作场所(“Not Safe (or Suitable) For Work;”)。在本文中,将介绍如何创建一个检测NSFW图像的图像分类模型。 数据集 由于数据集的性质,我们无法从一些数据集的网站(如Kaggle等)获得所有图像。 但是我们找到…

少儿编程 中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)2023年3月

2023年3月scratch编程等级考试四级真题 选择题(共25题,每题2分,共50分) 1、编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白处应填入的代码是 A、 B、 C、 D、 答案:C

[CTF/网络安全] 攻防世界 simple_php 解题详析

[CTF/网络安全] 攻防世界 simple_php 解题详析 代码解读PHP弱语言特性姿势参数a限制绕过参数b限制绕过 总结 题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 代码解读 $a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量&#xff0c…

协同过滤算法的召回率、准确率、覆盖率、新颖度

python版计算协同过滤推荐算法的召回率、准确率、覆盖率、新颖度 推荐算法网站示例Demo 点我跳转图书管理推荐系统 点我跳转课程推荐系统 点我跳转电影推荐系统 1、召回率、准确率 2、覆盖率、新颖度 覆盖率反映了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能够将…

ChatGPT开始颠覆学习方式,应试教育面临哪些挑战?

ChatGPT爆火几个月,整个教育系统都在被颠覆。全球范围内,不少大学教授、系主任和管理人员,都在对课堂进行大规模的调整,以应对ChatGPT对教学活动造成的巨大冲击。 国内传统应试教育选出的分霸、考霸,是更能吃苦&#…

c++中的方法

c中的方法 static方法 与数据成员类似,方法有时会应用于全部对象而不是单个对象。可以编写static方法和数据成员。在方法声明前加上static即可。对于方法的定义前则不需要重复使用static关键字。 class Foo { public:static int sumFunc(int a, int b); };int Fo…