自动化测试工具,支持多种浏览器。爬虫中主要用来解决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 browser = webdriver.Firefox() #可以任何的浏览器
try:
browser.get('https://www.baidu.com') #get() 方法
input = browser.find_element_by_id('kw') #找到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) #打印当前URL
print(browser.get_cookies()) #打印cookie
print(browser.page_source) #网页源码
finally:
''' browser.close()'''

先下载对应的驱动:https://github.com/mozilla/geckodriver/releases

以FireFox的驱动 geckodriver为例。下载后,建议可以直接放在FireFox的默认安装目录(C:\Program Files (x86)\Mozilla Firefox\)。

最重要一点:系统环境变量PATH里,添加上FireFox的安装路径。

 声明浏览器对象

首先要引入webdriver包

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.baidu.com')

    print(browser.page_source)

    browser.close()

查找元素

   单个元素

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://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,input_second,input_third)
browser.close()

常用的方法

browser.find_element_by_name()
browser.find_element_by_xpath()
browser.find_element_by_link_text()
browser.find_element_by_partial_link_text()
browser.find_element_by_tag_name()
browser.find_element_by_class_name()
browser.find_element_by_css_selector()

 通用的方式

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Firefox()
browser.get('http://www.taobao.com')
input_first =browser.find_element(By.ID,'q') #这种方式来获取Id
print(input_first)
browser.close()

  多个元素

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.taobao.com')
lis =browser.find_elements_by_css_selector('.service-bd li')
print(lis)
for item in lis:
print(item)
browser.close()

 元素交互操作

from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get('http://www.taobao.com')
inp = browser.find_element_by_id('q')
inp.send_keys('iPhone')
time.sleep(1)
inp.clear()
inp.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.Firefox()
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()

更多内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

执行JavaScript

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

打开知乎 拖动滚动条 到底部 弹出 To Bottom

 获取元素信息

   获取属性

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Firefox()
url = 'http://www.zhihu.com/explore'
browser.get(url)
logo=browser.find_element_by_id('zh-top-link-logo')
print(logo)
print(logo.get_attribute('class'))

  

  获取文本值

from selenium import webdriver
browser = webdriver.Firefox()
url = 'http://www.zhihu.com/explore'
browser.get(url)
inp=browser.find_element_by_class_name('zu-top-add-question')
print(inp.text)

  输出:

    提问

  

  获取ID、位置、标签名、大小

from selenium import webdriver
browser = webdriver.Firefox()
url = 'http://www.zhihu.com/explore'
browser.get(url)
inp=browser.find_element_by_class_name('zu-top-add-question')
print(inp.text)
print(inp.id)
print(inp.location)
print(inp.tag_name)
print(inp.size)

  输出:

提问
cfbbf4a5-ae09-4e04-bd47-ec0d98ecfdbe
{'x': 874, 'y': 7}
button
{'height': 32.0, 'width': 66.0}

 Frame

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException browser = webdriver.Firefox()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult') #跳转到iframe中
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() #切换到父frame
logo=browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)

 等待

  隐式等待

from selenium import webdriver
browser=webdriver.Firefox()
browser.implicitly_wait(10) #等待时间 10秒
browser.get('https://www.zhihu.com/explore')
inp = browser.find_element_by_class_name('zu-top-add-question')
print(inp)

  显示等待

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.Firefox()
browser.get('https://www.taobao.com')
wait=WebDriverWait(browser,1) #等待时间 1秒
imp = wait.until(EC.presence_of_element_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
print(imp,button)

 前进后退

import time
from selenium import webdriver browser = webdriver.Firefox()
browser.get('https://www.baidu.com')
browser.get('https://www.taobao.com')
browser.get('https://www.zhihu.com')
browser.back()
time.sleep(1)
browser.forward()
browser.close()

Cookies

from selenium import webdriver

browser = webdriver.Firefox()
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.Firefox()
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('http://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get('http://www.zhihu.com')
												

Selenium 库的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Python爬虫-- selenium库

    selenium库 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(S ...

  7. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

  8. python爬虫---从零开始(六)Selenium库

    什么是Selenium库: 自动化测试工具,支持多种浏览器.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera ...

  9. Python:利用 selenium 库抓取动态网页示例

    前言 在抓取常规的静态网页时,我们直接请求对应的 url 就可以获取到完整的 HTML 页面,但是对于动态页面,网页显示的内容往往是通过 ajax 动态去生成的,所以如果是用 urllib.reque ...

  10. 浅谈python中selenium库调动webdriver驱动浏览器的实现原理

    最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得. 当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢? from se ...

随机推荐

  1. 关于DNS 和根证书你了解多少?

    由于最近发生的一些事件,我们(Privacy Today 组织)感到有必要写一篇关于此事的短文.它适用于所有读者,因此它将保持简单 —— 技术细节可能会在稍后的文章发布. 什么是 DNS,为什么它与你 ...

  2. MySql安装和基本管理

    一.什么是数据库? mysql就是一个基于socket编写的C/S架构的软件 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流 ...

  3. ubuntu 构建Xilinx交叉编译环境

    嵌入式系统软硬件协同设计实战指南_基于XILINX ZYNQ_13603826.pdf 202页

  4. Android几种解析XML方式的比较

    https://blog.csdn.net/isee361820238/article/details/52371342 一.使用SAX解析XML SAX(Simple API for XML) 使用 ...

  5. [Android相机]通过手机摄像头识别环境亮度(转)

    源: [Android相机]通过手机摄像头识别环境亮度 iOS利用摄像头获取环境光感参数

  6. Sort aborted Error in MySQL Error Log

    现象 [ERROR] lines containing "Sort aborted" are present in the MySQL error log file. [Warni ...

  7. mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志

    mysql日志的种类 二进制日志(binary log):记录数据更新的操作,mysqlbinlog 可查看二进制日志文件 错误日志(error log):记录mysql服务进程mysqld的启动.关 ...

  8. RTP协议全解析(H264码流和PS流)

    转自:http://blog.csdn.net/chen495810242/article/details/39207305 写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个 ...

  9. Android - Resource 之 Menu 小结

    定义一个application的菜单,由MenuInflater召唤. 位置: res/menu/filename.xml 类型:指向Menu resource 文法: <?xml versio ...

  10. 集合框架-Map集合

    * Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...