自动化测试工具,支持多种浏览器。爬虫中主要用来解决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. Linux基础命令---文本格式转换expand,unexpand

    expand 将文件中的tab转换成空格,结果送到标准输出.如果没有指定文件,那么从标准输入读取. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.F ...

  2. android使用ARouter跳转activity(阿里巴巴开源的)

    android使用ARouter跳转activity(阿里巴巴开源的) 使用ARouter方式,点击按钮跳转到其他activitypublic void buyOrSell(String str){ ...

  3. python 爬虫基础知识一

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 网络爬虫必备知识点 1. Python基础知识2. P ...

  4. postgresql查询语句

    //查询表名称SELECT tablename FROM pg_tablesWHERE tablename NOT LIKE 'pg%'AND tablename NOT LIKE 'sql_%' O ...

  5. mergesort_arithmetic_python

    def merge(a, b): c = [] h = j = 0 while j < len(a) and h < len(b): if a[j] < b[h]: c.append ...

  6. Selenium+Headless Firefox

    背景 今天本地调试基于Selenium+PhantomJS的动态爬虫程序顺利结束后,着手部署到服务器上,刚买的热乎的京东云,噼里啪啦一顿安装环境,最后跑的时候报了这么个错误: UserWarning: ...

  7. composer 报错:Failed to decode response: zlib_decode(): data error 解决办法

    执行命令 composer require particle/validator 报错 Failed to decode response: zlib_decode(): data error 网上推 ...

  8. Golang并发编程优势与核心goroutine及注意细节

    Go语言为并发编程而内置的上层API基于CSP(communication sequential processes,顺序通信进程)模型.这就意味着显式锁都是可以避免的,比如资源竞争,比如多个进程同时 ...

  9. Android开发发布真机调试

    使用真机测试原因: 1. 模拟器启动慢,真机测试速度较快 2. 有些程序在真机测试才有效,模拟器存在bug,结果要以真机为标准 连接方法: 1.设置手机为开发者模式(设置->关于手机->连 ...

  10. 把源码放到服务器部署webservice调用出错 MVC C#

    C# WebService在本地调用正常,同样的代码布睹到服务器上总是调用报如下错误 Server Error in '/' Application. The resource cannot be f ...