selenium升级版

这篇具有很好参考价值的文章主要介绍了selenium升级版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

selenium

1.原理与安装

1.1原理

Selenium 是一个 Web 应用的自动化框架。

通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框

中输入文字 等操作。(相当于真正的浏览)

而且还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息

等等,然后用程序进行分析处理。

selenium 自动化流程如下:

  1. 自动化程序调用Selenium 客户端库函数(比如点击按钮元素)

  2. 客户端库会发送Selenium 命令 给浏览器的驱动程序

  3. 浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令

  4. 浏览器执行命令

  5. 浏览器驱动程序获取命令执行的结果,返回给我们自动化程序

  6. 自动化程序对返回结果进行处理

1.2安装

打开命令行程序,运行如下命令

pip install selenium

安装浏览器驱动

注意浏览器版本号一致

浏览器驱动 是和 浏览器对应的。 不同的浏览器 需要选择不同的浏览器驱动。

目前主流的浏览器中,谷歌 Chrome 浏览器对 Selenium自动化的支持更加成熟一些。强烈推荐大家使

用 Chrome浏览器。

pip install seleniumhttps://www.google.cn/chrome/

在浏览器上面输入:chrome://version/ 命令 查看自己下载的浏览器的版本

确保Chrome浏览器安装好以后,请大家打开下面的连接,访问Chrome 浏览器的驱动下载页面

https://chromedriver.storage.googleapis.com/index.html

注意浏览器驱动 必须要和浏览器版本匹配,版本号 就是和浏览器版本号对应的

安装时直接解压到python环境变量里面

1.3简单示例

下面的代码, 可以自动化的 打开edge浏览器,并且自动化打开百度网站,可以大家可以运行一下看

看。

from selenium import webdriver
# 创建 WebDriver 对象,指明使用edge浏览器驱动,r后面相当于上面的driver的解压地址,安装在python环境变量中就填空就行
wd = webdriver.Edge(r'd:\webdrivers\edgedriver.exe')
# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')

2.Selenium高级操作(隐藏浏览器界面)

options=webdriver.ChromeOptions()
options.add_argument('--headless')
#1、创建浏览器对象-打开浏览器
#driver=webdriver.Chrome()
driver=webdriver.Chrome(chrome_options=options)

3.Selenium常用函数

3.1 浏览器对象

浏览器对象browser常用方法及属性

browser.get():地址栏输入url地址并确认

browser.quit():关闭浏览器

browser.close():关闭当前页

browser.gmaximize_window():浏览器窗口最大化

browser.page_source:HTML结构源码。(即前端的源码)

browser.page_source.find(‘字符串’):从源码中查找指定字符串,返回源码大概的位置。如果没有

就返回-1,常用于判断最后一页

#假设说网页非最后一页的“下一页”的源代码为class='pn-next'
#网页最后一页的“下一页”的源代码为class='pn-nextdisabled'browser.page_source.find('pn-nextdisabled')==-1			#说明不是最后一页

3.2 定位节点

元素查找 - 返回值为节点对象或节点对象的列表

定位一个元素 定位多个元素 含义
find_element_by_id() find_elements_by_id() 通过元素id
find_element_by_name() find_elements_by_name() 通过元素name定位
find_element_by_class_name() find_elements_by_class_name() 通过类名进行定位
find_element_by_xpath() find_elements_by_xpath() 通过xpath表达式定位
find_element_by_link_text() find_elements_by_link_text() 通过完整超链接定位
find_element_by_partical_link_text() find_elements_by_partical_link_text() 通过部分链
find_element_by_tag_name() find_elements_by_tag_name() 通过标签定
find_element_by_css_selector() find_elements_by_css_selector() 通过css选择

例子:

# 假设网页源代码如下:
<!--假设页面源代码如下:--><html>
 <head>
 <bodylink="#0000cc">
  <aid="result_logo"href="/"onmousedown="return c({'fm':'tab','tab':'logo'})">
    <formid="form"class="fm"name="f"action="/s">   <spanclass="soutu-btn"></span>
        <inputid="kw"class="s_ipt"name="wd"value=""maxlength="255"autocomplete="off">
...
#通过id定位
driver.find_element_by_id("kw")
#通过name定位
driver.find_element_by_name("wd")
#通过classname定位
driver.find_element_by_class_name("s_ipt")
#通过tagname定位
driver.find_element_by_tag_name("input")
#通过xpath定位,xpath定位有N种写法,这里列几个常用写法
driver.find_element_by_xpath("//input[@id='kw']")
driver.find_element_by_xpath("//input[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
driver.find_element_by_xpath("/html/body/form/span/input")
driver.find_element_by_xpath("//span[@class='soutubtn']/input")
driver.find_element_by_xpath("//form[@id='form']/span/input")
driver.find_element_by_xpath("//input[@id='kw'and@name='wd']")

--------------------------------------------------------------------------
#假设页面上有一组文本链接:
<aclass="mnav"href="http://news.baidu.com"name="tj_trnews">新闻</a>
<aclass="mnav"href="http://www.hao123.com"name="tj_trhao123">hao123</a>--------------------------------------------------------------------------
#通过linktext定位
driver.find_element_by_link_text("新闻")
driver.find_element_by_link_text("hao123")

#通过partiallinktext定位
driver.find_element_by_partial_link_text("新")
driver.find_element_by_partial_link_text("hao")driver.find_element_by_partial_link_text("123")

3.3 节点对象方法

**节点对象常用属性及方法:

node.send_keys():向文本框发送内容
node.click():点击
node.clear():清空文本
node.get_attribute(‘属性名’):获取节点属性值
node.text:获取节点文本内容(包含子节点和后代节点)

3.4 selenium键盘操作

Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以

模拟键盘输入,也可以模拟键盘的操作。

常用的键盘操作如下:

模拟键盘按键 说明
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…Fn) 键盘 F1…Fn

3.5 selenium鼠标操作

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

方法 说明
ActionChains(driver) 构造ActionChains对象
context_click() 执行鼠标悬停操作
move_to_element(above) 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位
perform() 执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的

使用流程

导入鼠标事件类: from selenium.webdriver import ActionChains

实例化鼠标对象: ActionChains(browser)

指定鼠标行为: move_to_element(node)

执行鼠标行为: perform()

from selenium.webdriver import ActionChains

ActionChains(browser).move_to_element(node).perform()

driver.maximize_window() # 页面最大化

# 2.定位到要悬停的元素
element = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')

# 3.对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(to_element=element).perform()

例子:文章来源地址https://www.toymoban.com/news/detail-793256.html

from selenium.webdriver import ActionChains
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url='https://www.baidu.com/')
# 2.定位到要悬停的元素
element = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
# 3.对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(to_element=element).perform()
time.sleep(1)
driver.find_element_by_link_text('高级搜索').click()
time.sleep(5)
driver.quit()

3.6 selenium frame (登录问题)

一般遇到这样的问题,都是需要先进行登录的问题,我们发现网页中居然还嵌套一个网页,我们必

须的先选择内部的网页才能进行其他操作

处理方式

切换到要处理的frame

在frame中定位页面元素并进行操作

返回当前处理的Frame的上一级页面或主页面

常用函数

切换到frame:browser.switch_to.frame(frame节点对象)

返回上一级:browser.switch_to.parent_frame()

返回主页面:browser.switch_to.default_content()

使用步骤

默认支持id和name属性值查找:switch_to.frame(id|name)

先找到frame节点:frame_node = browser.find_element_by_xxx

再切换到frame:browser.switch_to.frame(iframe_node)

3.7 selenium浏览器控制方法

方法 说明
webdriver.set_window_size() 设置浏览器的大小
webdriver.**back() ** 控制浏览器后退
webdriver.forward() 控制浏览器前进
webdriver.refresh() 刷新当前页面
webdriver.clear() 清除文本
webdriver.send_keys(value) 模拟按键输入
webdriver.click() 单击元素
webdriver.submit() 用于提交表单
webdriver.get_attribute(name) 获取元素属性值
webdriver.is_displayed() 设置该元素是否用户可见
webdriver.size 返回元素的尺寸
webdriver.text 获取元素的文本

例子:

from selenium import webdriver
from time import sleep
# 1.创建Chrome浏览器对象,这会在电脑上在打开一个浏览器窗口
driver = webdriver.Chrome()
# 2.通过浏览器向服务器发送URL请求
driver.get("https://www.baidu.com/")
sleep(3)
# 3.刷新浏览器
driver.refresh()
# 4.设置浏览器的大小
driver.set_window_size(1400, 800)
# 5.设置链接内容
element = driver.find_element_by_link_text("新闻")
element.click()
element = driver.find_element_by_link_text("韩国踩踏事故")
element.click()

3.8 获取断言信息

不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之

为断言。通过我们获取title 、URL和text等信息进行断言。

属性 说明
title 用于获得当前页面的标题
current_url 用户获取当前页面的url
text 获取搜索条目的文本信息

例子:

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
print('Before search================')
# 打印当前页面title
title = driver.title
print(title) # 百度一下,你就知道
# 打印当前页面URL
now_url = driver.current_url
print(now_url) # https://www.baidu.com/
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(1)
print('After search================')
# 再次打印当前页面title
title = driver.title
print(title) # selenium_百度搜索
# 打印当前页面URL
now_url = driver.current_url
print(now_url) # https://www.baidu.com/s?ie=utf-
8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium&rsv_pq=a1d51b980000e36e&rsv_t=a715
IZaMpLd1w92I4LNUi7gKuOdlAz5McsHe%2FSLQeBZD44OUIPnjY%2B7pODM&rqlang=cn&rsv_enter=
0&rsv_sug3=8&inputT=758&rsv_sug4=759
# 获取结果数目
user = driver.find_element_by_class_name('nums').text
print(user) # 百度为您找到相关结果约7,170,000个
#关闭所有窗口
driver.quit()

到了这里,关于selenium升级版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 语音识别(利用python将语音转化为文字)(升级版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于语音识别(1)进行的完善,修改了60秒断触的问题,另外可以更加方便的调用,语音识别1的链接如下: https://blog.csdn.net/m0_46657126/article/details/124531081 https://www.xfyun.cn/ ps:注册账户是完全免费的,因

    2024年02月03日
    浏览(70)
  • 【计算机视觉 | 分割】SAM 升级版:HQ-SAM 的源代码测试(含测试用例)

    下面是一个测试用例,会逐一解读代码: 导入库: os:提供与操作系统交互的函数。 numpy(导入为 np):一个用于数值计算的Python库。 torch:主要用于使用PyTorch,一个流行的深度学习框架的库。 matplotlib.pyplot(导入为 plt):用于绘制图表和可视化数据的库。 cv2:OpenCV库,用

    2024年02月16日
    浏览(34)
  • C语言猜数字升级版

    题目概述 猜数字是一种益智游戏,既可以两个人一起玩,也可以与电脑一起玩。现在我们需要将这个游戏移到电脑上,让电脑与我们一起玩猜数字游戏. 需求分析 用户输入:确定用户输入的数据是否正确 游戏过程:保证计算机能正确选定一个随机数字,并能够正常与用户互

    2024年02月04日
    浏览(55)
  • 爱心发射代码带名字升级版

    上次的爱心发射发出来之后,群友想问能不能把心爱的人名字放在爱心中间。 当然没问题啊,于是我就改了改代码,让女神王铁蛋显示在爱心中间,同时还可以在屏幕上飘动满屏的王铁蛋,大大小小、快快慢慢的王铁蛋。 这还拿不下王铁蛋? 话不多说,直接上效果图。 背景

    2024年02月11日
    浏览(48)
  • 单身狗问题(初级)兼(升级版)

    所属专栏:经典算法题❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ 🚀 关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

    2024年02月16日
    浏览(43)
  • 爬虫练习-12306自动购票升级版

    hello兄弟们,偷懒归来了。别问为啥这么久没更,问就是失踪了 最近一直在学习Django以及爬虫进阶之类的知识,加上快期末了,一直没有想起来自己还有一个账号没有更新,sorry啦 言归正传,今天抽空把前面的文章升级了一下。这里先把整理好的代码提前放给大家 代码放上,

    2024年02月06日
    浏览(63)
  • P1553 数字反转(升级版)(JAVA)

    以下为原题面,仅供参考: 给定一个数,请将该数各个位上数字反转得到一个新数。 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小

    2024年02月13日
    浏览(45)
  • 云计算中网络基础知识(升级版)

    网络相连:电脑-交换机-电脑 需要配置两个地址:(1) IP地址、子网掩码、网关(网络的出口)。 (2) MAC 地址(物理地址)不需要配置,电脑网卡自带的(天生就有) 电脑必须要配置IP地址、子网掩码 才可以通信、网关可以不用(前提是两台电脑处在同一个网段下) 网关

    2023年04月27日
    浏览(44)
  • EasyExcel复杂表头导出(一对多)升级版

            在之前写的 EasyExcel复杂表头导出(一对多)的博客的结尾,受限于当时的能力和精力,留下一些问题及展望。现在写下此博客,目的就是解决之前遗留的问题。         背景介绍,见上述链接指向的博客,这里主要通过 自定义拦截器 的形式来完美解决。 对于图

    2024年02月06日
    浏览(62)
  • 【Unity+MySQL】实现注册登录系统(升级版)

    接着 上篇文章所谈到的系统缺陷,这篇文章进行升级解决。 问题 :注册界面与登录界面是同一个界面,导致用户输入用户密码进行注册后,即可点击登录。 解决 :在同一个场景中分别创建注册界面和登录界面,使用SetActive控制注册/登录成功后UI的显示与隐藏。 整体的UI框

    2024年02月09日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包