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字符串中的单双引
Feb 16 Python
python 实现登录网页的操作方法
May 11 Python
python进行TCP端口扫描的实现
Dec 21 Python
Python button选取本地图片并显示的实例
Jun 13 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
使用python创建生成动态链接库dll的方法
May 09 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
Python使用windows设置定时执行脚本
Nov 12 Python
python 用递归实现通用爬虫解析器
Apr 16 Python
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 Python
Python何绘制带有背景色块的折线图
Apr 23 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截取后台登陆密码的代码
2012/05/05 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
js数组的操作指南
2014/12/28 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
python中实现k-means聚类算法详解
2017/11/11 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
创业计划书中包含的9个方面
2013/12/26 职场文书
初中英语演讲稿
2014/04/29 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
2014年司机工作总结
2014/11/21 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
2015年教师节广播稿
2015/08/19 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang