Python—Selenium快速上手

简介

        Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。

一、环境安装

        1.selenium安装

通过pip安装

pip3 install selenium

        2.安装浏览器驱动

                针对不同的浏览器,需要安装不同的驱动,下面以安装 Chrome 驱动作为演示

                2.1确认浏览器版本

                        在Chrome浏览器网址输入框 输入chrome://version/ 查看浏览器版本

                2.2打开下载Chrome驱动网页

                                找到对应版本,链接已经为大家准备好了,

CNPM Binaries Mirroricon-default.png?t=O83Ahttps://registry.npmmirror.com/binary.html?path=chrome-for-testing

                根据自己系统下载

这里我下载的是 Win64位 chromedriver-win64.zip

下载完成后只有一个exe文件,保存到合适位置,并把当前路径保存到环境变量,添加成功后使用代码进行测试

这里我们就安装驱动成功了

二、基础用法

1.对页面进行操作

1.1初始化浏览器对象

from selenium import webdriver
# 加载web驱动工具,使用绝对路径加载
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))

1.2访问页面

进行页面访问使用的是get方法,传入参数为待访问页面的URL地址即可。

from selenium import webdriver
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
#使用get方法访问页面
test_webdriver.get('https://www.baidu.com/')

1.3设置浏览器大小

set_window_size()方法可以用来设置浏览器大小,而maximize_window则是设置浏览器为全屏

from selenium import webdriver
import time
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))


# 设置浏览器大小:全屏
test_webdriver.maximize_window()   
test_webdriver.get('https://www.baidu.com/')
time.sleep(2)

# 设置分辨率 500*500
test_webdriver.set_window_size(500,500)  
time.sleep(2)

 1.4浏览器前进后退以及刷新

from selenium import webdriver
import time
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
test_webdriver.get('https://image.baidu.com/')
print("打开百度新闻页面")
time.sleep(5)
# 刷新页面
test_webdriver.refresh()
time.sleep(5)
# 返回百度首页
test_webdriver.back()
print('返回至百度首页')
time.sleep(5)
# 前进百度页面
test_webdriver.forward()
print('前进至百度新闻页')

1.5 获取页面基础属性

from selenium import webdriver
import time
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
test_webdriver.get('https://image.baidu.com/')
#网页标题
print(test_webdriver.title)
# 当前网址
print(test_webdriver.current_url)
# 浏览器名称
print(test_webdriver.name)
# 网页源码
print(test_webdriver.page_source)

2.定位页面元素

以我们熟知的 百度为例,我们进入首页,按 【F12】 进入开发者工具。红框中显示的就是页面的代码,我们要做的就是从代码中定位获取我们需要的元素。

 我们在实际使用浏览器的时候,很重要的操作有输入文本、点击确定等等。对此,Selenium提供了一系列的方法来方便我们实现以上操作。通过webdriver对象的 find_element(by=“属性名”, value=“属性值”),主要包括以下这八种。

属性函数
CLASSfind_element(by=By.CLASS_NAME, value=‘’)
XPATHfind_element(by=By.XPATH, value=‘’)
LINK_TEXTfind_element(by=By.LINK_TEXT, value=‘’)
PARTIAL_LINK_TEXTfind_element(by=By.PARTIAL_LINK_TEXT, value=‘’)
TAGfind_element(by=By.TAG_NAME, value=‘’)
CSSfind_element(by=By.CSS_SELECTOR, value=‘’)
IDfind_element(by=By.ID, value=‘’)

百度举例

可以看到这个对应的class,name以及id分别是这些,通过以下语句都可以定位到这个元素

from selenium import webdriver
from selenium.webdriver.common.by import By

test_webdriver= webdriver.Chrome()
test_webdriver.get('https://www.baidu.com') 
element=test_webdriver.find_element(by=By.CLASS_NAME,value='s_ipt')
element=test_webdriver.find_element(by=By.ID,value='kw')

 3.模拟鼠标操作

这里需要导入ActionChains 类

from selenium.webdriver.common.action_chains import ActionChains

3.1鼠标事件

页面交互操作

操作

函数
单击click()
右击context_click()
双击double_click()
拖拽double_and_drop()
悬停move_to_element()
执行perform()

4.键盘事件

引入keys类

from selenium.webdriver.common.keys import Keys

4.1常用操作

操作函数
删除键send_keys(Keys.BACK_SPACE)
空格键send_keys(Keys.SPACE)
制表键send_keys(Keys.TAB)
回退键send_keys(Keys.ESCAPE)
回车send_keys(Keys.ENTER)
全选send_keys(Keys.CONTRL,‘a’)
复制send_keys(Keys.CONTRL,‘c’)
剪切send_keys(Keys.CONTRL,‘x’)
粘贴send_keys(Keys.CONTRL,‘v’)
键盘F1send_keys(Keys.F1)

5.延时等待

5.1强制等待

首先引入time工具

import time

也就是常说的睡眠, 直接time.sleep(n),n为等待的时间,在执行get方法后执行

5.2 隐式等待

implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常

5.3 显式等待

设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常,

5.3.1WebDriverWait的参数说明

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

driver: 浏览器驱动

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 每次检测的间隔时间,默认是0.5秒

ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

5.3.2 WebDriverWait的方法说明:

until(method,message=‘’)

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not(method,message=‘’): 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

有哪些方法呢?

from selenium.webdriver.support import expected_conditions as EC
# 判断标题是否和预期的一致
title_is
# 判断标题中是否包含预期的字符串
title_contains
# 判断指定元素是否加载出来
presence_of_element_located
# 判断所有元素是否加载完成
presence_of_all_elements_located
# 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator
visibility_of_element_located
# 判断元素是否可见,传入参数是定位后的元素WebElement
visibility_of
# 判断某个元素是否不可见,或是否不存在于DOM树
invisibility_of_element_located
# 判断元素的 text 是否包含预期字符串
text_to_be_present_in_element
# 判断元素的 value 是否包含预期字符串
text_to_be_present_in_element_value
#判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it
#判断是否有alert出现
alert_is_present
#判断元素是否可点击
element_to_be_clickable
# 判断元素是否被选中,一般用在下拉列表,传入WebElement对象
element_to_be_selected
# 判断元素是否被选中
element_located_to_be_selected
# 判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False
element_selection_state_to_be
# 判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False
element_located_selection_state_to_be
#判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了

6.窗口切换


        在 selenium 操作页面的时候,可能会因为点击某个链接而跳转到一个新的页面(打开了一个新标签页),这时候 selenium 实际还是处于上一个页面的,需要我们进行切换才能够定位最新页面上的元素。

        窗口切换需要使用 switch_to.windows() 方法。

        假如上面代码在点击跳转后,使用 switch_to 切换窗口,window_handles 返回的 handle 列表是按照页面出现时间进行排序的,最新打开的页面肯定是最后一个,这样用 test_webdriver.window_handles[-1] + switch_to 即可跳转到最新打开的页面了。

windows = test_webdriver.window_handles
test_webdriver.switch_to.window(windows[1])

        那如果打开的窗口有多个,如何跳转到之前打开的窗口,如果确实有这个需求,那么打开窗口是就需要记录每一个窗口的 key(别名) 与 value(handle),保存到字典中,后续根据 key 来取 handle 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值