一.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. CSS--块级元素和行内元素

    相同:设置后,对应的模块都会脱离文档流 不同点:position相应的块级元素会覆盖下面的内容(文字,),而float只会覆盖块级元素,里面的文字会脱离 出来 float是浮动定位,position是 ...

  2. RabbitMq 6种使用模式

    RabbitMQ的5种模式与实例 1.1 简单模式Hello World 功能:一个生产者P发送消息到队列Q,一个消费者C接收 生产者实现思路: 创建连接工厂ConnectionFactory,设置服 ...

  3. docker 6 docker运行的底层原理

    docker是一个client-server结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器,是一个运行时的环境,就 ...

  4. Python排序算法——插入排序

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10787464.html 一.插入排序(Inse ...

  5. redis学习(三)——List数据类型

    一.概述      在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,R ...

  6. Linux系统文件和目录管理

    Linux系统文件和目录管理 相关命令的解析 1.pwd:显示用户当前的工作目录 2.ls: -a:显示所有文件,包括隐藏文件 -l:显示文件的详细信息 3.设备文件统一存放在/dev 设备文件 块设 ...

  7. FineUIMvc新特性速递(大间距模式,隐藏菜单垂直滚动条)

    即将发布的 FineUIMvc 新版本会引入两个重要的特性,用来提升用户体验,现在就来先睹为快吧: 大间距模式 我们已经支持的显示模式有:紧凑模式,普通模式,大字体模式. 紧凑模式: 普通模式: 大字 ...

  8. jquery tooltip

    这是个加了点淡入淡出效果的顶部tooltip控件,会自动消失 用法: <head> <title></title> <link href="base ...

  9. WPF仿网易云音乐系列(三、播放进度条+控制按钮)

    一.简介 上一篇,咱们基本把左侧导航栏给搞定,这一篇文章,开始来做一下播放进度条和控制按钮:老规矩,咱们先来看一下原版的效果: 首先,它这个专辑图片,有一个按钮效果,鼠标移入会显示出伸缩箭头:移出后消 ...

  10. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 发送通知功能改进改进

    公司有几万个用户,接近10万人,有一些紧急的通知,消息提醒,可以发个及时通知工具,这样可以快速把一些信息通知给大家,让大家快速收到信息,及时通知到系统的每个人. 自动提示信息现实状态,会在客户端自动谈 ...