python Selenium 库的使用技巧


Posted in Python onOctober 16, 2020

Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。 -- 百度百科

首先下载驱动文件:https://chromedriver.storage.googleapis.com/index.html?path=2.39/

放入google目录下

python Selenium 库的使用技巧

测试代码,测试是否能读取到驱动文件。

from selenium import webdriver

path = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=path)

url = "https://www.baidu.com"
driver.get(url)
print(driver.page_source)

python Selenium 库的使用技巧

简单的实现浏览器测试

# -*- coding:utf-8 -*-
from selenium import webdriver

WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=WebPath)
driver.set_window_size(1000,500)

url = "https://www.baidu.com"
driver.get(url)
print(driver.find_element_by_id("kw"))

Selenium 自动化测试库的使用:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="gbk">
  <title>Selenium Test</title>
</head>
<body>
  <div class="acount" id="aid">
    <a class="mnav" href="https://news.baidu.com" rel="external nofollow" name="trnews">新闻</a>
    <a class="mnav" href="https://lyshark.cnblogs.com" rel="external nofollow" name="myblog">我的博客</a>
    <a class="mnav" href="https://github.com/lyshark" rel="external nofollow" name="mygit">GitHub</a>
  </div>
  <form id="forms" class="fms" name="submit_form" action="index.html">
    <span class="soutu-btn"></span>
    <p>用户: <input id="user" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off"></p>
    <p>密码: <input id="pass" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off"></p>
    <input type="submit" value="提交" />
  </form>
  <p name="p1" > hello lyshark p1</p>
  <p name="p2" > hello lyshark p2</p>
</body>
</html>

通过简单的浏览文件并实现简单的定位.

# 驱动下载地址: http://chromedriver.storage.googleapis.com/index.html
from selenium import webdriver

WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=WebPath)
driver.set_window_size(1024,768)

# 常用的定位变量参数如下所示.
driver.get("http://lyshark.com")
print("当前URL: {}".format(driver.current_url))
print("当前标题: {}".format(driver.title))
print("网页代码: {}".format(driver.page_source))

# 基本的 find_element 标签查找定位方式
print(driver.find_element_by_id("user"))     # 通过ID来查找元素
print(driver.find_element_by_name("p1").text)   # 通过name属性来定位
print(driver.find_element_by_class_name("s_ipt")) # 通过类名来定位

# 通过xpath定位,xpath定位有N种写法,这里列几个常用写法
print(driver.find_element_by_xpath("//form[@class='fms']//input[@id='user']"))
print(driver.find_element_by_xpath("//p[@name='p1']"))
print(driver.find_element_by_xpath("//html/body/form/p/input"))
print(driver.find_elements_by_css_selector(".fms #user"))

# 定位a标签中的关键字.
print(driver.find_element_by_link_text("新闻"))
print(driver.find_element_by_partial_link_text("我"))

通过xpath定位标签并自动输入内容,发送登录请求到后端,写法如下.

from selenium import webdriver

WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=WebPath)
driver.set_window_size(1024,768)

driver.get("http://lyshark.com")

# 通过xpath语法定位到用户名的标签上并且自动输入lyshark这个用户名
driver.find_element_by_xpath("//form[@class='fms']/p//input[@id='user']").send_keys("lyshark")

# 通过xpath语法定位到密码的标签上清空默认值,然后输入123123密码
driver.find_element_by_xpath("//form[@class='fms']/p//input[@id='pass']").clear()
driver.find_element_by_xpath("//form[@class='fms']/p//input[@id='pass']").send_keys("123123")

# 提交这个请求,默认有两种提交方式一种是 click() 一种是submit()
driver.find_element_by_xpath("//form[@class='fms']/input[@type='submit']").click()

通过键盘鼠标类库记录并可回放

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=WebPath)
driver.set_window_size(1024,768)

driver.get("https://www.baidu.com")

# ------------------------------------------------------------------------
# ActionChains 类提供了鼠标操作的常用方法,鼠标事件的常用函数说明
# perform():    鼠标悬浮于标签
# context_click(): 右击
# double_click():  双击
# drag_and_drop(): 拖动
# move_to_element():鼠标悬停

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

# ------------------------------------------------------------------------
# webdriver.common.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) 键盘 F1

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
# 输入空格键+从入门到入土
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("从入门到入土")

# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')

# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)

简单的点击事件

# -*- coding:utf-8 -*-
from selenium import webdriver
import time

WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=WebPath)
driver.set_window_size(1024,768)
driver.get("https://www.baidu.com")

driver.find_element_by_id("kw").send_keys("lyshark") # 发送给id=kw的编辑框,搜索关键字 lyshark
driver.find_element_by_id("su").click()        # 点击搜索按钮,百度一下的ID是su
time.sleep(1)
# xpath 语法 寻找 div id是1里面的 a标签取出标签中的 contains text()
driver.find_element_by_xpath("//div[@id='1']//a[contains(text(),'-')]").click()
time.sleep(1)

handle = driver.current_window_handle  # 获取当前窗口句柄
handle_all = driver.window_handles   # 获取当前所有开启窗口的句柄
print(handle_all)
driver.switch_to.window(handle_all[0])  # 切换到第一个窗口中
time.sleep(1)
driver.find_element_by_id("kw").clear() # 接着清空搜索框中的内容

python Selenium 库的使用技巧

百度自动收集

from selenium import webdriver
from bs4 import BeautifulSoup
from queue import Queue
import requests,os,re,lxml

# driver: http://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/

head = {"User-Agent":"Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3"}
WebPath = "C:/Users/LyShark/AppData/Local/Google/Chrome/Application/chromedriver.exe"
driver = webdriver.Chrome(executable_path=WebPath)


queue = Queue()
for item in range(0,1000,10):
	queue.put('https://www.baidu.com/s?wd={}&pn={}'.format("lyshark",str(item)))

for item in queue.queue:
	driver.get(item)
	ret = str(driver.page_source)
	try:
		soup = BeautifulSoup(ret,'lxml')
		urls = soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})
		for item in urls:
		  get_url = requests.get(url=item['href'],headers=head,timeout=5)
		  if get_url.status_code == 200:
		    print(get_url.url)
	except Exception:
		pass

python Selenium 库的使用技巧

页面等待

from selenium import webdriver

driver=webdriver.Chrome()
driver.get('https://www.taobao.com/')
wait=WebDriverWait(driver,3) #设置监听driver等待时间3秒
input=wait.until(EC.presence_of_element_located((By.ID,'q'))) #设置等待条件为id为q的元素加载完成
button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search'))) #设置等待条件为class名为btn-search的元素加载完成
print(input,button)

driver = webdriver.Firefox()
driver.implicitly_wait(10) #隐式等待设置为10等待时间
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

键盘操作

element=driver.find_element_by_id('search') #获取输入框
element.send_keys('selenium') #搜索selenium包
element.send_keys(Keys.ENTER) #按回车键

element_a=driver.find_element_by_link_text('selenium') #定位selenium包链接

ActionChains(driver).move_to_element(element_a).click(element_a).perform() #按左键点击链接执行

element_down=driver.find_element_by_link_text('Download files') #定位下载链接
ActionChains(driver).move_to_element(element_down).click(element_down).perform() #按左键点击链接

element_selenium=driver.find_element_by_link_text('selenium-3.13.0.tar.gz') #定位元素selenium下载包链接
data=element_selenium.get_attribute('href')  #获取链接地址
with open('selenium-3.13.0.tar.gz','wb') as f:
  source=requests.get(data).content  #请求下载链接地址获取二进制包数据
  f.write(source) #写入数据
  f.close()
  
driver.quit()

menu = driver.find_element_by_css_selector(".nav") #获取element对象
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") #获取点击对象
#创建鼠标对象
actions = ActionChains(driver)
#移动鼠标到对象
actions.move_to_element(menu)
#点击对象
actions.click(hidden_submenu)
#执行操作
actions.perform()

文章作者:lyshark
文章出处:https://www.cnblogs.com/lyshark

以上就是python Selenium 库的使用技巧的详细内容,更多关于python Selenium 库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
django连接oracle时setting 配置方法
Aug 29 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
Python作用域与名字空间原理详解
Mar 21 Python
Python定义一个函数的方法
Jun 15 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Django数据模型中on_delete使用详解
Nov 30 Python
用Python进行websocket接口测试
Oct 16 #Python
python如何控制进程或者线程的个数
Oct 16 #Python
python利用 keyboard 库记录键盘事件
Oct 16 #Python
python实现快速文件格式批量转换的方法
Oct 16 #Python
Python通过getattr函数获取对象的属性值
Oct 16 #Python
pandas处理csv文件的方法步骤
Oct 16 #Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 #Python
You might like
也谈截取首页新闻 - 范例
2006/10/09 PHP
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
JS 统计时间
2021/03/09 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
解决python3爬虫无法显示中文的问题
2018/04/12 Python
django项目搭建与Session使用详解
2018/10/10 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
python从Oracle读取数据生成图表
2020/10/14 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
CK美国官网:Calvin Klein
2016/08/26 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
创业计划书如何编写
2014/02/06 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
合理化建议书范文
2015/09/14 职场文书
某某店铺的开业庆典主持词范本
2019/11/25 职场文书
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle