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 ...
随机推荐
- hadoop ncdc数据下载方法
我在看<Hadoop权威指南>时,里面提供了NCDC天气数据样本,提供的下载链接是:点击打开链接,但是里面只提供了1901和1902这两年的数据,这未免也太少了点!完全称不上“BIG DA ...
- BlockingCollection 集合随记
BlockingCollection 集合是一个并发安全的集合,而且设计用来实现类似于消息队列的功能,生产者.消费者模式. static void Main(string[] args) { Bloc ...
- Centos iptables防火墙设置
iptables的基本语法格式 iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]说明:表名.链名用于指定iptables命令所操作的表和链,命令选项用于指定 ...
- SQL Server 隐式转换引发的死锁
在SQL Server的应用开发过程(尤其是二次开发)中可能由于开发人员对表的结构不够了解,造成开发过程中使用了不合理的方式造成数据库引擎未按预定执行,以致影响业务.这是非常值得注意的.这次为大家介绍 ...
- 《Think in Java》17~18
chapter 17 容器深入研究 填充容器 package cn.test; import java.util.ArrayList; import java.util.Collections; im ...
- 实验1 C语言运行环境的使用和数据类型、运算符和表达式
Part1 这一部分的内容虽然简单,但是对于初学的我来说,独自完成且没有错误还是不容易的,像老师说的一样,只有自己亲手编写以后才可以发现问题并且逐步改正.从这次实践我对与C语言程序的结构更加熟悉. ...
- ubuntu 12.0.4 下python3.x web环境搭建
ubuntu 12.0.4 安装python3.x 1. $ sudo add-apt-repository ppa:fkrull/deadsnakes$ sudo apt-get update$ s ...
- css中的左右垂直居中的问题,可兼容各种版本浏览器的写法
如题分为垂直居中,左右居中,先挑简单的记录. 一.左右居中 1.我刚开始写代码的时候,老师就直接告诉我一个简单的方法,那就是: width:500px; height:200px; margin:0 ...
- jquery源码解析:type,isPlainObject,parseHTML,parseXML,globalEval详解
jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... type: function( ...
- protobuf高效传输对比json gizp等等
https://blog.csdn.net/u013929284/article/details/72582215 利用Protocol Buffers可以很好的解决JSON数据在传输方面的不足,它是 ...