selenium自动化(python)

介绍

Selenium是用于测试网站的自动化测试工具,支持Chrome、Firefox、Safari浏览器,也支持phantomJS无界面浏览器。

支持系统有:Windows、Linux、IOS、Android

安装

pip install Selenium

安装浏览器驱动

Selenium3.x调用浏览器须下载webdriver驱动文件,下载或将文件放入python安装目录Scripts下机行。

  1. Chrome驱动下载:点击下载chromedrive
  2. Firefox驱动下载:点解下载geckodriver

开始使用

1.调用浏览器

from selenium import webdriver

browser = webdriver.Firefox()  # 选浏览器Chrome、Firefox、Safari

browser.get("http://www.baidu.com")  
w_id = browser.find_element_by_id("kw")  # 定位元素
w_id.send_keys("selenium")  # 对定位的元素输入内容
browser.find_element_by_id("su").click()  # 对定位的进行事件点击
browser.close()  # 关闭当前窗口
browser.quit()  # 关闭所有窗口

2.Selenium的8种定位方式

定位一个元素含义
find_element_by_id通过元素id定位
find_element_by_name元素name定位
find_element_by_xpathxpath表达式定位
find_element_by_link_text完整超链接定位
find_element_by_partial_link_text部分链接定位
find_element_by_tag_name标签定位
find_element_by_class_name类名进行定位
find_elements_by_css_selectorcss选择器进行定
**!!! 定位多个元素:**在element + s 就行

3. 控制浏览器操作方法

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

4. 鼠标事件

方法说明
ActionChains(driver)构造ActionChains对象
context_click()右击
double_click()双击
drag_and_drop(source, target)拖动
move_to_element()鼠标悬停
move_to移动
perform()执行所有ActionChains中存储的行为

如:

from selenium import webdriver
#引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
 
driver = webdriver.Chrome()
driver.get("url")
#定位到需要右击的元素
right_click = driver.find_element_by_id("id")
#对元素进行右击操作
ActionChains(driver).context_click(right_click).perform()

5.键盘事件

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

7. 获取断言信息

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

8.设置元素等待

显式等待

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(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

    driver :浏览器驱动。
    timeout :最长超时时间,默认以秒为单位。
    poll_frequency :检测的间隔(步长)时间,默认为0.5S。
    ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
until(method, message=‘’)

	调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’)

	调用该方法提供的驱动程序作为一个参数,直到返回值为False。

隐式等待

隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime

driver = webdriver.Firefox()

# 设置隐式等待为10秒
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

try:
    print(ctime())
    driver.find_element_by_id("kw22").send_keys('selenium')
except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())
    driver.quit()

9.多表单切换

方法说明
switch_to.frame()将当前定位的主体切换为frame/iframe表单的内嵌页面中
switch_to.default_content()跳回最外层的页面

10.多窗口切换

方法说明
current_window_handle获得当前窗口句柄
window_handles返回所有窗口的句柄到当前会话
switch_to.window(句柄)切换到相应的窗口

11.警告框处理

方法说明
text返回 alert/confirm/prompt 中的文字信息
accept()接受现有警告框
dismiss()解散现有警告框
send_keys(keysToSend)发送文本至警告框。keysToSend:将文本发送至警告框。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠标悬停至“设置”链接
link = driver.find_element_by_xpath("//*/span[text()='设置']")
ActionChains(driver).move_to_element(link).perform()

# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()

# 保存设置
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(2)

# 接受警告框
driver.switch_to.alert.accept()

driver.quit()

12.下拉框选择

from selenium.webdriver.support.select import Select
方法说明
select_by_value(“选择值”)select标签的value属性的值
select_by_index(“索引值”)下拉框的索引
select_by_visible_testx(“文本值”)下拉框的文本值
from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# 鼠标悬停至“设置”链接
link = driver.find_element_by_xpath("//*/span[text()='设置']")
sleep(1)
# 打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
sleep(2)

# Select() 定位选择
# 搜索结果显示条数
sel = driver.find_element_by_xpath("//select[@id='nr']")
Select(sel).select_by_value('50')  # 显示50条
# ……

driver.quit()

13.文件上传

通过send_keys()方法来实现文件上传

# 定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')

14.cookie操作

方法说明
get_cookies()获得所有cookie信息
get_cookie(name)返回字典的key为“name”的cookie信息
add_cookie(cookie_dict)添加cookie。“cookie_dict”指字典对象,必须有name 和value 值
delete_cookie(name,optionsString)删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”
delete_all_cookies()删除所有cookie信息
from selenium import webdriver

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

# 获得cookie信息
cookie= driver.get_cookies()
# 将获得cookie的信息打印
print(cookie)

# 向cookie的name 和value中添加会话信息
driver.add_cookie({'name': 'name', 'value': 'value'})

# 遍历cookies中的name 和value信息并打印,当然还有上面添加的信息
for cookie in driver.get_cookies():
    print("%s -> %s" % (cookie['name'], cookie['value']))

driver.quit()

15.调用JavaScript代码

execute_script()方法执行JavaScript代码

#4.通过javascript设置浏览器窗口的滚动条位置
js="window.scrollTo(100,450);"
driver.execute_script(js)

16.窗口截图

方法说明
get_screenshot_as_file(self, filename)用于截取当前窗口,并把图片保存到本地
#1.截取当前窗口,并指定截图图片的保存位置
driver.get_screenshot_as_file("D:\\img.jpg")

17.关闭浏览器

方法说明
close()关闭单个窗口
quit()关闭所有窗口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值