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遍历类中所有成员的方法
Mar 18 Python
深入Python解释器理解Python中的字节码
Apr 01 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
Python通用函数实现数组计算的方法
Jun 13 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
python requests使用socks5的例子
Jul 25 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
详解scrapy内置中间件的顺序
Sep 28 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
python 实现体质指数BMI计算
May 26 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
php去除重复字的实现代码
2011/09/16 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
js 窗口抖动示例
2013/09/04 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
ReactNative列表ListView的用法
2017/08/02 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
使用python实现tcp自动重连
2017/07/02 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python pygame实现球球大作战
2019/11/25 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
采购主管岗位职责
2014/02/01 职场文书
优秀幼教自荐信
2014/02/03 职场文书
高一学生期末评语
2014/04/25 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
2014年医院工作总结
2014/11/20 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
golang中的空slice案例
2021/04/27 Golang
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python