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 相关文章推荐
Python获取linux主机ip的简单实现方法
Apr 18 Python
python实现简单登陆流程的方法
Apr 22 Python
Python3.5 创建文件的简单实例
Apr 26 Python
Python实现的读写json文件功能示例
Jun 05 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Python装饰器模式定义与用法分析
Aug 06 Python
python实现机器学习之多元线性回归
Sep 06 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
选择Python写网络爬虫的优势和理由
Jul 07 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
pandas的相关系数与协方差实例
Dec 27 Python
python 连续不等式语法糖实例
Apr 15 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
浅谈php冒泡排序
2014/12/30 PHP
php四种定界符详解
2017/02/16 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
JSON辅助格式化处理方法
2013/03/26 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
Python与Redis的连接教程
2015/04/22 Python
Python实现批量修改文件名实例
2015/07/08 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
服务口号大全
2014/06/11 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
大学四年个人总结
2015/03/03 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书