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. Replication--发布属性immediate_sync

    在创建发布时,如果选择立即初始化,会将immediate_sync属性设置为true.如果immediate_sync属性为true时,snapshot文件和发布事务及发布命令将一直保留到指定的事务保 ...

  2. HBase介绍 (1)---数据模型

    http://blog.csdn.net/heyutao007/article/details/5766896 BigTable是什么?Google的Paper对其作了充分的说明.字面上看就是一张大表 ...

  3. unable browse url when InfoPath Convert to Connection File

    You must actived the windows feature "Desktop Experience" on the server : http://blogs.tec ...

  4. 24. 两两交换链表中的节点 leetcode

    题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...

  5. 用户画像,知乎Live总结

    ttps://www.zhihu.com/lives/889189116527403008/messages 用户画像两层含义:单个标签:用户的分布 标签体系要与时俱进,如果标签被下游强依赖,则不轻易 ...

  6. 6.iptables常用规则

    开启ip段192.168.1.0/24端的80口 开启ip段211.123.16.123/24端ip段的80口 # iptables -I INPUT -p tcp --dport 80 -j DRO ...

  7. Logstash使用grok解析IIS日志

    Logstash使用grok解析IIS日志 1. 安装配置 安装Logstash前请确认Elasticsearch已经安装正确,参见RedHat6.4安装Elasticsearch5.2.0. 下载链 ...

  8. dbproxy-user/pwd

    dbproxy 的账号是统一的, 即连接dbproxy,连接主mysql ,连接从mysql 的账号必须一样, 为了隔离 即使用dbproxy的人感知不到mysql, 需要分离 配置文件 #dbpro ...

  9. 51nod2004 终结之时 (支配树+树剖+树链的并)

    link 我永远喜欢洛天依 给定一张图世末积雨云,你需要维护其支配树: 单点修改,子树修改,树链修改 子树求和,树链求和,多条树链的并集求和 撤销之前的操作 可以先用 Lengauer-Tarjan ...

  10. 设计模式 — 建造者(生成器)模式(Builder)

    考虑这样一种业务场景,我们构建一个业务对象,但是这个业务对象及其复杂.为了代码的根号的可读性,我们会把这个对象的构建过程根据精密联系的程度来拆分成几个类来完成.最后再放到一起使用来生成复杂对象.这个业 ...