Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,这种抓取方式十分有效。

基本使用示例:

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 def main(args):
#打开Chrome浏览器
browser = webdriver.Chrome()
try:
#浏览器跳转到百度
browser.get('https://www.baidu.com')
#获取当前页面id为kw的元素,kw为输入框
input = browser.find_element_by_id('kw')
#输入python
input.send_keys('Python')
#回车
input.send_keys(Keys.ENTER)
#设置最长等待时间
wait = WebDriverWait(browser,10)
#如果在等待时间内id为content_left的元素没有出现则抛出加时异常
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()
return 0 if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))

下面详细介绍Selenium的用法。

from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
#浏览器对象初始化

browser.get('https://www.taobao.com')
#用get()方法访问百度

print(browser.page_source)
#输出淘宝页面的源代码

q = browser.find_element_by_id('q')
#获得源代码的q节点
q = browser.find_element_by_css_selector('#q')
#用CSS选择器获取
q = browser.find_element_by_xpath('//*[@id="q"]')
#用XPath获取
#获取的结果皆为WebElement类型

这里列出其它获取单个节点的方法:
find_element_by_name
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name

from selenium.webdriver.common.by import By
q = browser.find_element(By.ID,'q')
#也可以这样获取

lis = browser.find_elements_by_css_selector('.service-bd li')
#获取多个节点,element后多了个s

q.send_keys('少女歌剧')
#输入文字

button = browser.find_element_by_class_name('btn-search')
button.click()
#点击搜索按钮

browser.get("https://www.zhihu.com/explore")
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#将进度条拉到最下
browser.execute_script('alert("To Bottom")')
#弹出alert提示框

print(q.get_attribute('class'))
#获取节点属性
print(q.text)
#获取文本
print(q.id)
#获取id

browser.switch_to.frame('iframeResult')
#切换Frame

from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(browser,10)
from selenium.webdriver.support import expected_conditions as EC
#设置最长等待时间
input = wait.until(EC.presence_of_element_located((By.ID,'q')))
#如果id为q的节点没有出现则抛出EC异常
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
#不可点击则抛出异常

browser.back()
#后退
browser.forward()
#前进

print(browser.get_cookies())
#输出cookie
cookie = {
'name':'name',
'domain':'www.zhihu.com',
'value':'germey'
}
browser.add_cookie(cookie)
#添加cookie
browser.delete_all_cookies()
#删除所有cookie

browser.execute_script('window.open()')
#开启一个选项卡
browser.switch_to_window(browser.window_handles[1])
#切换到第二个选项卡
browser.get('https://www.baidu.com')
#在第二个选项卡打开一个新页面

browser.close()
#关闭浏览器

Selenium库简介的更多相关文章

  1. Python3.x:第三方库简介

    Python3.x:第三方库简介 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...

  2. BerkeleyDB库简介

    BerkeleyDB库简介 BerkeleyDB(简称为BDB)是一种以key-value为结构的嵌入式数据库引擎: 嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和b ...

  3. LevelDB库简介

    LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...

  4. 为采集动态网页安装和测试Python Selenium库

    1. 引言上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经 ...

  5. python利用selenium库识别点触验证码

    利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...

  6. python爬虫---selenium库的用法

    python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...

  7. MXNet深度学习库简介

    MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...

  8. python爬虫笔记----4.Selenium库(自动化库)

    4.Selenium库 (自动化测试工具,支持多种浏览器,爬虫主要解决js渲染的问题) pip install selenium 基本使用 from selenium import webdriver ...

  9. Python3 使用selenium库登陆知乎并保存cookie为本地文件

    Python3 使用selenium库登陆知乎并保存cookie为本地文件 学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selen ...

随机推荐

  1. GridView中合并单元格

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da ...

  2. EasyFastCMS系列教学课程——1、三层框架的搭建

    在本系列教程中,我们以一个大型CMS系统的完整开发流程为例,和大家一起探讨net开发的经验和教训.在本程序中,我们采用了流行的三层/N层框架+仓储模式的架构模式.项目分层示意图:     各层的主要用 ...

  3. 9、select 语句

    基础语句 select * from tb1; select * from tb1 limit 3; select name,age from tb1; select name,age from tb ...

  4. easyui里面的API=====》 load

    在easyui里面有个API load,这个API实用性质很强,可以直接帮我加载页面的数据到想需要的相应输入框里面,但是也要注意,这些将要被填入数据的输入框里面的属性有个要求:其中输入框里面的name ...

  5. PHP初步:在Mac OS X Yosemite下搭建Apache+PHP+Mysql

    Mac OS X是基于unix的操作系统,很多软件都集成在系统中.所以,对于配置PHP的开发环境相对于windows和Linux更简单. 1. 启动Apache服务器 打开终端(terminal),查 ...

  6. Flink学习笔记:Time的故事

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  7. css 清楚浮动三种方法

    我们可以看到这样一个布局: <style> .left{ width: 200px; height: 200px; background-color: #00ee00; float: le ...

  8. Windows下Anaconda安装 python + tensorflow GPU版

    这里首先确认没有安装CPU版本,并默认已经安装了CUDA和Cudnn以及anaconda. 安装gpu版本的tensorflow 接下来需要安装GPU版本的tensorflow: 打开cmd并输入: ...

  9. DEM反应添加顺序注意问题

    在含有DEM反应的dat中,均相反应的block要在DEM反应之前,例如: @(RXNS) (some reaction equations) @(END) @(DES_RXNS) (some rea ...

  10. 基础篇:3.2)规范化:3d零件建模

    本章目的:规范化零件建模,这是机械的基本功夫. 1.建模的总体原则和总体要求 1.1 建模总体原则 a)零件模型应能准确表达零件的设计信息:b)零件模型包含零件的几何要素.约束要素和工程要素:c)零件 ...