一.Selenium介绍

   1.Selenium(浏览器自动化测试框架):

    Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

  2.Selenium框架图:

二.Selenium的安装和简单使用:

  1.安装:(官方文档:https://selenium-python.readthedocs.io/api.html

     pip install selenium或使用安装包

  2.浏览器的安装(若没在环境变量中,请下载):

Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/

  3.简单使用Selenium:

    3.1简单获取百度网页并退出(会弹出浏览器模拟操作):

from selenium import webdriver
from scrapy.selector import Selector
# 打开谷歌浏览器
# 若没将浏览器Chrome的exe文件添加到PATH下,则带参数指定浏览exe文件的位置
# brower=webdriver.Chrome(executable_path='....')
# 添加在PATH下自动找取
brower = webdriver.Chrome()
# 获取的是js和css文件加载完后的网页,而不是该网页源代码 brower.get('https://www.baidu.com/')
# 获取js和css加载完后的网页
print(brower.page_source)
'''
selenium提供了很多提取网页内容的方法,如下等,但是selenium是用纯python写的,
提取效率慢,若知是提取内容,建议用scrapy,模拟输入密码和点击时用selenium的方法
brower.find_element_by_css_selector()
brower.find_elements_by_css_selector()
......
'''
#利用scrapy的selector解析,速度更快
t_select=Selector(text=brower.page_source)
......
# 退出
brower.quit()

    3.2模拟登录微博:

from selenium import webdriver
import urllib browser = webdriver.Chrome()
browser.get('https://weibo.com/')
import time
time.sleep(10)
username = browser.find_element_by_css_selector('#loginname')
passwd=browser.find_element_by_css_selector('input[node-type="password"]')
if username:
username.send_keys('yourphone')
else:
print('未找到用户名输入框!!!标签错误')
if passwd:
passwd.send_keys('yourpasswd')
else:
print('未找到密码输入框!!!标签错误')
yanzhengma=browser.find_element_by_css_selector('.code.W_fl img')
if yanzhengma:
#获取验证码图片下载地址并下载到本地
img_url=yanzhengma.get_attribute('src')
data = urllib.request.urlopen(img_url).read()
f = open('weibo.png' , 'wb')
f.write(data)
f.close()
code_input=browser.find_element_by_css_selector('input[node-type="verifycode"]')
#可以使用打码平台或自动识别验证码
codes=input('请输入截图里的验证码:')
code_input.send_keys(codes)
browser.find_elements_by_css_selector('a[node-type="submitBtn"]')[0].click()

    3.3selenium实现页面滚动下拉:

from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.oschina.net/blog')
#执行js代码,可以设定下拉到底部或某个位置等
for i in range(3):
#下拉三次
browser.execute_script(
"window.scrollTo(0,document.body.scrollHeight); var lenofPage=document.body.scrollHeight; return lenofPage;")
time.sleep(3)

    3.4selenium设置不加载图片(加快效率):

from selenium import webdriver
#设置chromedriver不加载图片,加速页面的加载
option=webdriver.ChromeOptions()
prefs={'profile.managed_default_content_settings.images':2}
option.add_experimental_option("prefs",prefs)
browser=webdriver.Chrome(chrome_options=option)
browser.get('https://www.taobao.com/')

   3.5phantomjs的简单使用(无界面的浏览器,速率快,但多进程情况下性能下降很严重):

       注:selenium3.11.0及以上版本不在支持phantomjs,若需使用则要安装旧版的selenium(pip3 uninstall selenium 安装历史版本:pip3 install selenium==3.10.0或更旧的版本)

from selenium import webdriver

browser = webdriver.PhantomJS(executable_path='E:/phantomjs-2.1.1-windows/bin/phantomjs.exe')
browser.get('https://www.cnblogs.com/lyq-biu/p/9753969.html')
print(browser.page_source)

    3.6selenium集成到scrapy(若要使用,记得在setting中添加到中间件):

       注:scrapy本身是异步的,经过这样的selenium集成会变成同步的,会降低速率,若想集成仍是异步的,则需重写downloader。参考:https://github.com/flisky/scrapy-phantomjs-downloader

#第一种
from selenium import webdriver
from scrapy.http import HtmlResponse
class SeleniumMiddleware(object):
#通过selenium请求动态网页
def process_request(self,request,spider):
#spider的名字是jobbole才使用selenium方法
if spider.name=='jobbole':
#请求一次打开一个窗口,很慢
browser=webdriver.Chrome()
browser.get(request.url)
return HtmlResponse(url=request.url,body=browser.page_source)
#第二种
from selenium import webdriver
from scrapy.http import HtmlResponse class SeleniumMiddleware(object):
# 通过selenium请求动态网页
def __init__(self):
#使用一个Chrome,return之后无法关闭,则初始化可以放入spider中,调用spider.close()关闭
self.browser = webdriver.Chrome()
super(SeleniumMiddleware, self).__init__() def process_request(self, request, spider):
if spider.name == 'jobbole':
self.browser.get(request.url)
return HtmlResponse(url=request.url, body=self.browser.page_source)
#第三种
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
......
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts'] def __init__(self):
self.browser = webdriver.Chrome()
super(JobboleSpider, self).__init__()
#分发给spider_close,使用信号量spider_closed
dispatcher.connect(self.spider_close,signals.spider_closed ) def spider_close(self):
#爬虫退出时关闭Chrome
self.browser.quit()
......
class SeleniumMiddleware(object):
# 通过selenium请求动态网页
def process_request(self, request, spider):
if spider.name == 'jobbole':
# browser=webdriver.Chrome()
spider.browser.get(request.url)
return HtmlResponse(url=request.url, body=spider.browser.page_source)

    3.7pyvirtualdisplay的简单使用(无界面):

      安装:pip install  pyvirtualdisplay

from selenium import webdriver
from pyvirtualdisplay import Display
#设置无界面,windows环境下不适用
display=Display(visible=0,size=(800,600))
display.start()
browser=webdriver.Chrome()
browser.get('https://i.cnblogs.com/EditPosts.aspx?postid=9753969&update=1')
......
browser.quit()
display.stop()

    3.8scrapy-splash,selenium grid,splinter

三.总结:

  有很多模拟浏览器操作的插件,而selenium用纯Python写的,效率较慢,但使用方便,是一个很好的测试框架,它的selenium支持分布式。  

Selenium简单回顾的更多相关文章

  1. Android混淆、反编译以及反破解的简单回顾

    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...

  2. 中国2017 Google 开发者大会第二天简单回顾

    昨天早晨发布了第一天的开发者大会回顾文章后,就匆匆忙忙赶去会场继续享受高科技的盛宴,接下来简单回顾一下第二天的大会参与情况. 昨天早晨下着小雨,并带着微风,在外面还是挺冷的,这里不得不给工作人员点个赞 ...

  3. 中国2017 Google 开发者大会第一天简单回顾

    昨天有幸参加了中国2017 Google 开发者大会,在这第一天就收获满满,昨天太忙了,今天早晨来一起简单回顾一下,可以让没有参加的童鞋们感受一下现场的温度. 早早就来到了会议现场,外面看不出什么特别 ...

  4. Selenium 简单的例子

    Selenium是一个web自动化验收测试框架.   Selenium Client Driver - Selenium 2.0 Document http://seleniumhq.github.i ...

  5. python+selenium 简单尝试

    前言 selenium是一种自动化测试工具,简单来说浏览器会根据写好的测试脚本自动做一些操作. 关于自动化测试,一开始接触的是splinter,但是安装的时候发现它是基于selenium的,于是打算直 ...

  6. kafka简单回顾

    先说说遇到的坑 回顾下kafka topic:生产组:P0\P1----P14 一个消费组:c0 c1 c2 依据Consumer的负载均衡分配 消费顺序"c0:p0-p4 c1:p5-p9 ...

  7. Jmeter简单回顾

    之前公众号推文一上手就分享如何测接口, 其实忽略了一些概念性的东西, 今天来给大家拾遗补缺, 做个回顾吧. 一. JMeter介绍 jmeter能做什么,来自官网的解释: Ability to loa ...

  8. 自动化测试基础篇--Selenium简单的163邮箱登录实例

    摘自https://www.cnblogs.com/sanzangTst/p/7472556.html 前面几篇内容一直讲解Selenium Python的基本使用方法.学习了什么是selenium: ...

  9. Spring(完成毕业设计后的简单回顾)

    最近刚刚做完了毕业设计,在开发时用的是spring框架,做的时候踩了好多坑,又把当初的笔记给翻了翻,做一次简单的回顾 # 1.Spring是什么? 是一个开源的.用于简化企业级应用开发的应用开发框架. ...

随机推荐

  1. 转://通过udev创建ASM共享磁盘(RAC)

    OS:RedHat EL6.0 Oracle:   Oracle 11gR2 在Oracle 11gR2,构建RAC时可以通过ASM创建asm disk,但是需要安装asmlib相关软件:对于RedH ...

  2. Java8时间的简单时间

    package com.java8.date; import org.junit.Test; import java.text.SimpleDateFormat; import java.time.* ...

  3. P1563 玩具谜题(简单模拟)

    就是一个简单模拟 #include<iostream> #include<string> using namespace std; ; int in[maxn], x[maxn ...

  4. P1024 一元三次方程求解(二分答案)

    思路: 求这个根,然后有一个关键的条件|x1-x2|>=1,然后就是从-100,枚举到+100,每次二分(i, i+1)注意如果f(i)*f(i+1)>0则不进行二分,如果,你觉得这样的值 ...

  5. CONTRO4 系列

    软件下载 https://getcomposer.org/download/ 0技术手册 https://wenku.baidu.com/view/4b511ead376baf1ffd4fad36.h ...

  6. pytorch例子学习——TRAINING A CLASSIFIER

    参考:https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html#sphx-glr-beginner-blitz-cifar1 ...

  7. Floyed

    1.定义 可解任意两点间的最短路径 可判有向图或负权的最短路径问题,也可用于计算有向图的传递闭包 2.算法描述 简单点说,就是暴力遍历 时间复杂度O(n^3) 下面是简简单单的代码: #include ...

  8. Unity热更新学习(一) —— AssetBundle 打包和加载

    理论不多说,网上,官方文档都有.  这里有一篇介绍很全面的文章:https://www.cnblogs.com/ybgame/p/3973177.html 示例和注意点记录一下,用到时以便查阅. 一. ...

  9. jar包读取外部文件

    public static void main(String[] args) { String path1 = System.getProperty("user.home");// ...

  10. AndroidO bluedroid alarm 机制分析

    bluedroid的alarm 机制实现在osi/osi/src/alarm.cc 中: 这里面实现了很多的接口: alarm_t* alarm_new(const char* name): alar ...