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爬虫之爬虫编写全记录
Nov 06 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
50行Python代码实现人脸检测功能
Jan 23 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
Django ORM 查询管理器源码解析
Aug 05 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
pytorch 常用线性函数详解
Jan 15 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
Python SQLAlchemy库的使用方法
Oct 13 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
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
浅谈Angular路由守卫
2017/08/26 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python线性回归实战分析
2018/02/01 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
介绍一下linux的文件系统
2015/10/06 面试题
UML设计模式笔试题
2014/06/07 面试题
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
服装发布会策划方案
2014/05/22 职场文书
校本教研活动总结
2014/07/01 职场文书
民事二审代理词
2015/05/25 职场文书
员工考勤管理制度
2015/08/06 职场文书
外出学习心得体会范文
2016/01/18 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
python元组打包和解包过程详解
2021/08/02 Python
Python集合set()使用的方法详解
2022/03/18 Python
Python os和os.path模块详情
2022/04/02 Python