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连接sql server乱码的解决方法
Jan 28 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
在Python中操作字符串之startswith()方法的使用
May 20 Python
Python实现文件按照日期命名的方法
Jul 09 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python Selenium截图功能实现代码
Apr 26 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
看看如何用Python绘制小米新版天价logo
Apr 20 Python
python分分钟绘制精美地图海报
Feb 15 Python
python读取mat文件生成h5文件的实现
Jul 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
一个颜色轮换的简单例子
2006/10/09 PHP
PHP 引用文件技巧
2010/03/02 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
Node.js简单入门前传
2017/08/21 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python中执行shell的两种方法总结
2017/01/10 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
python实现学生信息管理系统源码
2021/02/22 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
六十大寿答谢词
2014/01/12 职场文书
博士生求职信
2014/07/06 职场文书
西双版纳导游词
2015/02/03 职场文书
义卖募捐活动总结
2015/05/09 职场文书
七一慰问简报
2015/07/20 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
分析设计模式之模板方法Java实现
2021/06/23 Java/Android