Selenium库简介
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库简介的更多相关文章
- Python3.x:第三方库简介
Python3.x:第三方库简介 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...
- BerkeleyDB库简介
BerkeleyDB库简介 BerkeleyDB(简称为BDB)是一种以key-value为结构的嵌入式数据库引擎: 嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和b ...
- LevelDB库简介
LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...
- 为采集动态网页安装和测试Python Selenium库
1. 引言上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经 ...
- python利用selenium库识别点触验证码
利用selenium库和超级鹰识别点触验证码(学习于静谧大大的书,想自己整理一下思路) 一.超级鹰注册:超级鹰入口 1.首先注册一个超级鹰账号,然后在超级鹰免费测试地方可以关注公众号,领取1000积分 ...
- python爬虫---selenium库的用法
python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...
- MXNet深度学习库简介
MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...
- python爬虫笔记----4.Selenium库(自动化库)
4.Selenium库 (自动化测试工具,支持多种浏览器,爬虫主要解决js渲染的问题) pip install selenium 基本使用 from selenium import webdriver ...
- Python3 使用selenium库登陆知乎并保存cookie为本地文件
Python3 使用selenium库登陆知乎并保存cookie为本地文件 学习使用selenium库模拟登陆知乎,并将cookie保存为本地文件,然后供以后(requests模块)使用,用selen ...
随机推荐
- GridView中合并单元格
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da ...
- EasyFastCMS系列教学课程——1、三层框架的搭建
在本系列教程中,我们以一个大型CMS系统的完整开发流程为例,和大家一起探讨net开发的经验和教训.在本程序中,我们采用了流行的三层/N层框架+仓储模式的架构模式.项目分层示意图: 各层的主要用 ...
- 9、select 语句
基础语句 select * from tb1; select * from tb1 limit 3; select name,age from tb1; select name,age from tb ...
- easyui里面的API=====》 load
在easyui里面有个API load,这个API实用性质很强,可以直接帮我加载页面的数据到想需要的相应输入框里面,但是也要注意,这些将要被填入数据的输入框里面的属性有个要求:其中输入框里面的name ...
- PHP初步:在Mac OS X Yosemite下搭建Apache+PHP+Mysql
Mac OS X是基于unix的操作系统,很多软件都集成在系统中.所以,对于配置PHP的开发环境相对于windows和Linux更简单. 1. 启动Apache服务器 打开终端(terminal),查 ...
- Flink学习笔记:Time的故事
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- css 清楚浮动三种方法
我们可以看到这样一个布局: <style> .left{ width: 200px; height: 200px; background-color: #00ee00; float: le ...
- Windows下Anaconda安装 python + tensorflow GPU版
这里首先确认没有安装CPU版本,并默认已经安装了CUDA和Cudnn以及anaconda. 安装gpu版本的tensorflow 接下来需要安装GPU版本的tensorflow: 打开cmd并输入: ...
- DEM反应添加顺序注意问题
在含有DEM反应的dat中,均相反应的block要在DEM反应之前,例如: @(RXNS) (some reaction equations) @(END) @(DES_RXNS) (some rea ...
- 基础篇:3.2)规范化:3d零件建模
本章目的:规范化零件建模,这是机械的基本功夫. 1.建模的总体原则和总体要求 1.1 建模总体原则 a)零件模型应能准确表达零件的设计信息:b)零件模型包含零件的几何要素.约束要素和工程要素:c)零件 ...