Selenium的使用详解


Posted in Python onOctober 19, 2018

先来看一下功能实现,代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
#声明浏览器对象
browser = webdriver.Chrome()
try:
  browser.get('https:www.baidu.com')
  input = browser.find_element_by_id('kw')
  input.send_keys('Python')
  input.send_keys(Keys.ENTER)
  wait = WebDriverWait(browser,10)
  wait.until(EC.presence_of_element_located((By.ID,'content_left')))
  print(browser.current_url)
  print(browser.get_cookies())
  print(browser.page_source)
finally:
  browser.close()

可以看到打开了百度网站,查询了“Python”并且输出了当前的url,cookies还有网页源代码。

下面再来介绍详细功能。

1、声明浏览器对象。

browser = webdriver.Chrome()
browser = webdriver.Firefox()

浏览器的对象初始化,并将其赋值给browser对象。

2.以淘宝为例,请求网页。

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source)
browser.close()

可以看到输出了淘宝的源码,随后关闭。

3.查找节点

单个节点

提取搜索框这个节点

检查搜索框如下:

Selenium的使用详解

查找搜索框:

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
# 通过id查找
input_first = browser.find_element_by_id('q')
# 通过css查找
input_second = browser.find_element_by_css_selector('#q')
# 通过xpath查找
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first,input_second,input_third)
browser.close()
# 查找单个节点的方法
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

通用方法查找:

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(By.ID,'q')
print(input_first)
browser.close()
  • find_element()里面需要两个参数,查找方式By和值,
  • 例如:find_element(By.ID,'q')  通过查找ID的当时,查找id为q。

多个节点:

例如左侧的导航条所有条目:

Selenium的使用详解

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements_by_css_selector('.service-bd li')
print(lis)
browser.close()

获取多个节点的方法:

find_elements_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

通用方法在这里同样适用。

4、节点交互

import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')
# 输入文字用send_keys()
input.send_keys('ipone')
time.sleep(1)
#清空文字用clear()
input.clear()
input.send_keys('ipad')
button = browser.find_element_by_class_name('btn-search')
#点击
button.click()

5、动作链

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
#找到被拖拽的标签
source = browser.find_element_by_css_selector('#draggable')
#找到拖拽目的地的标签
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source,target)
actions.perform()

运行结果如下:

Selenium的使用详解

6、执行JavaScript

例如下拉进度条,可以直接模拟运行JavaScript,适用execute_script()即可实现

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

将滚动条拉到底部,执行结果如下:

Selenium的使用详解

7、获取节点信息

获取属性

Selenium的使用详解

代码如下:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
# 获取class属性
print(logo.get_attribute('class'))

获取文本值

Selenium的使用详解

代码如下:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)

输出结果如下:

Selenium的使用详解

获取id、位置、标签名和大小

以上面的标签为例:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)
# 输出位置
print(input.location)
#标签名
print(input.tag_name)
#大小
print(input.size)

输出结果:

Selenium的使用详解

8、界面切换

代码如下:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#界面切换到子界面
browser.switch_to.frame('iframeResult')
try:
  # 查找logo
  logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
  print('NO LOGO')
  # 界面切换到父级界面
browser.switch_to.parent_frame()
# 查找logo
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)

9、延时等待

隐式等待

当selenium没有在DOM中找到节点,继续等待,超出设定时间,抛出异常

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)

显式等待

指定要查找的节点,然后指定一个最长等待时间,如果在规定时间内加载出来节点,返回节点,如果超出规定时间,抛出异常。

browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser,10)
input = wait.until(EC.presence_of_element_located((By.ID,'q')))
# 节点可点击
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(input,button)

10、Cookies

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
# 获取cookies
print(browser.get_cookies())
# 添加cookie
browser.add_cookie({'name':'name','domin':'www.zhihu.com','value':'germey'})
print(browser.get_cookies())
# 删除所有的cookies
browser.delete_all_cookies()
print(browser.get_cookies())

输出结果:

Selenium的使用详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
Python数据类型之Dict字典实例详解
May 07 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
PyQtGraph在pyqt中的应用及安装过程
Aug 04 Python
python快速排序的实现及运行时间比较
Nov 22 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
pandas数据处理之绘图的实现
Jun 15 Python
keras的三种模型实现与区别说明
Jul 03 Python
Python爬取成语接龙类网站
Oct 19 #Python
将Django项目部署到CentOs服务器中
Oct 18 #Python
python中将zip压缩包转为gz.tar的方法
Oct 18 #Python
Python 忽略warning的输出方法
Oct 18 #Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 #Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 #Python
python 自定义异常和异常捕捉的方法
Oct 18 #Python
You might like
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
JavaScript更改class和id的方法
2008/10/10 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python操作日期和时间的方法
2014/03/11 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python清除函数占用的内存方法
2018/06/25 Python
python看某个模块的版本方法
2018/10/16 Python
Python发展简史 Python来历
2019/05/14 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
开业主持词
2014/03/21 职场文书
3分钟演讲稿
2014/04/30 职场文书
岗位职责说明书
2014/05/07 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
2014和解协议书范文
2014/09/15 职场文书
卡特教练观后感
2015/06/08 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
一行Python命令实现批量加水印
2022/04/07 Python