Python爬虫之Selenium库的使用方法


Posted in Python onJanuary 03, 2021

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

# 基本使用
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()

# 声明浏览器对象
from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

# 访问页面
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
print(browser.page_source)
browser.close()

# 查找元素
# 单个元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
# 下面三个效果是一样的
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first)
print(input_second)
print(input_third)
browser.close()

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input_first = browser.find_element(By.ID, 'q')
print(input_first)
browser.close()

# 多个元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements_by_css_selector('.service-bd li')
print(lis)
browser.close()

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements(By.CSS_SELECTOR, '.service-bd li')
print(lis)
browser.close()

# 元素交互操作
# 对获取的元素调用交互方法
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')
input.send_keys('笔记本电脑')
time.sleep(5)
input.clear()
input.send_keys('iPad')
button = browser.find_element_by_class_name('btn-search')
# button.click()

# 交互动作
# 将动作附加到动作链中串行执行
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()

# 执行JavaScript
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")')

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

# 获取文本值
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)

# 获取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)

# Frame
import time
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')
source = browser.find_element_by_css_selector('#draggable')
print(source)
try:
  logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
  print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)

# 等待
# 隐式等待
# 当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后抛出找不到元素的异常,
# 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0
from selenium import webdriver
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)

# 显示等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
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)

# 前进后退
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('https://www.python.org')
browser.back()
time.sleep(5)
browser.forward()
browser.close()

# Cookies
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())
browser.add_cookie({'name':'name', 'domain':'www.zhihu.com', 'value':'germey'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())

# 选项卡管理
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(5)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')

# 异常处理
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.find_element_by_id('hello')

from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
browser = webdriver.Chrome()
try:
  browser.get('https://www.baidu.com')
except TimeoutException:
  print('Time Out')
try:
  browser.find_element_by_id('hello')
except NoSuchElementException:
  print('No Element')
finally:
  browser.close()

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

Python 相关文章推荐
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
python变量不能以数字打头详解
Jul 06 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
Python 查找字符在字符串中的位置实例
May 02 Python
Python数据类型之Number数字操作实例详解
May 08 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
python logging日志模块原理及操作解析
Oct 12 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
Python装饰器的练习题
Nov 23 Python
python运算符之与用户交互
Apr 13 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 #Python
Python编写万花尺图案实例
Jan 03 #Python
Python 实现一个简单的web服务器
Jan 03 #Python
关于Python错误重试方法总结
Jan 03 #Python
详解python中的异常和文件读写
Jan 03 #Python
python绘制雷达图实例讲解
Jan 03 #Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 #Python
You might like
使用PHP数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
js 数组操作代码集锦
2009/04/28 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
深入理解Ajax的get和post请求
2016/06/02 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
Python中join和split用法实例
2015/04/14 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python对象属性自动更新操作示例
2018/06/15 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
质检员的岗位职责
2013/11/15 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
Python中的xlrd模块使用整理
2021/06/15 Python
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL