0


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()通过元素idfind_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()

例子:

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用户获取当前页面的urltext获取搜索条目的文本信息
例子:

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()

本文转载自: https://blog.csdn.net/sheep55/article/details/134810645
版权归原作者 小柔的 所有, 如有侵权,请联系我们删除。

“selenium升级版”的评论:

还没有评论