- 博客(274)
- 收藏
- 关注
原创 jenkins执行python+selenium取消无头模式
在win10本地安装的jenkins上构建web自动化任务,最后运行结果正常,但是运行的过程没有显示出来,想直观的看到运行的过程步骤如下:1.在本地安装一个tomcat,下载jenkins.war放在tomcat的webapps下2.想要启动jenkins必须先启动tomcat。在tomcat-bin下双击startup.bat启动tomcat成功启动后 访问http://localhost:8080/jenkins/3.在jenkins上面重新构建web脚本。执行成功,执行..
2021-11-01 08:39:52
731
原创 Jenkins执行python代码
在ide运行正常,在jenkins运行提示 模块不存在,找了一圈,原来是jenkin运行python的环境没设置解决方式:在Manage Jenkins -- System Configuration -- Configure System中设置全局变量,将python3运行环境加进来重新执行,成功...
2021-11-01 08:30:32
674
1
原创 Python基础-48-文本处理(逗号分隔值CSV)
前言python自带模块csv可以将数据以csv格式输出到文件,也可以将csv数据读回列表、元组数据写入和读取【代码部分】# coding:utf-8import csv# data也可以为列表data = ( ["1", "suner001", "b123456"], ["2", "suner002", "b123456"], ["3", ...
2019-09-12 14:27:22
2241
原创 Python+Selenium-20-图片验证码处理
前言有些注册页面会含有验证码,本篇描述在selenium中对验证码的处理实例需求打开万维易源注册页面:https://www.showapi.com/auth/reg (这个是第三方api平台易源接口,后面验证码识别用的就是他的)在注册页面中包含验证码的操作需求分析1)打开控制台,点击上方截图中的验证码图片,在network中会有一条请求信息(这里为获取验...
2019-08-20 17:02:23
6863
2
原创 Python+Selenium-19-expected_conditions模块使用
前言当我们打开一个url后,判断打开的页面是否正确,有两种方式:1)判断打开页面的title是否等于或包含预期值① 需要导入模块:from selenium.webdriver.support import expected_conditions②expected_conditions.title_contains 标题包含(多用);titile_is 标题等于2)判断...
2019-08-20 09:54:21
1674
1
原创 Python脚本-2-python批量修改文件名
需求如下:路径下有多个文件夹打开文件夹,如截图,文件命名,需将-1、-2图片等改为对应的1.jpg、2.jpg...代码部分import osdef rename_course(path): """重新命名每一张图片名为:1.jpg、2.jpg等""" files = os.listdir(path) # 路径下所有的文件夹 for fil...
2019-08-14 12:02:19
544
原创 Python脚本-1-python批量修改xml文件实例
需求将文件夹中xml文件的include、preview以及cylinder中的url都改为相对路径层级目录是一个文件夹包含很多子文件夹,子文件夹中有很多文件,其中包括xml文件,需要进行修改的就是此处的tour.xml代码部分import osimport xml.etree.ElementTree as ETdef get_xml(path): "...
2019-08-06 14:40:14
890
原创 测试基础-11-Moco配置文件启动并测试moco接口
前言前面我们使用的都是单个配置文件(test.json),这样针对单个接口操作是没问题的,当然我们也可以将所有接口都放在一个配置文件中,因为配置文件的格式为一个数组类型的 JSON 格式,数组的每一个元素是一个 request/response 的配对。还有一种方式我们设置全局配置文件,即在文件中引入其他配置文件的方式,最后启动时,只针对全局配置文件启动,比较方便单文件配置1)我...
2019-07-15 16:45:45
953
原创 测试基础-10-Moco使用
前言上一篇搭建好了moco环境,本篇为moco中request和response的具体使用moco使用(request部分)1)description字段,在所有JSONAPI中,可以使用description来描述这个会话的目的。它只是用作注释,在运行时将被忽略。//test.json[ { "description": "any response...
2019-07-15 16:45:04
815
原创 测试基础-9-Moco本地服务器搭建
前言moco是一个简单模拟服务器的程序库,可以用来模拟请求与返回数据,下载下来是一个.jar文件,环境运行依赖于java,需要提前安装好java环境moco使用场景:1)可以在单元测试过程中mock测试数据2)前后端分离,后端未开发完毕或者后台没有数据,前端开发可以mock相应格式数据来调试,无需等待后端开发完成或提供相应数据,提升工作效率3)依赖于第三方,数据不便于知晓...
2019-07-15 16:44:39
528
原创 Python基础-47-yaml使用
前言基础的配置数据我们可以用.ini文件、.json文件等来存放,当然yaml也是可以的,并且使用起来更方便,本篇讲解yaml使用安装python中操作yaml文件的库为pyyaml模块pip install pyyaml 直接安装(如下图,安装完成)yaml文件编写的基础规则1)大小写敏感2)使用缩进表示层级关系3)缩进时不允许使用Tab,只允许使...
2019-07-12 17:13:08
392
原创 环境安装-12-Centos7之tomcat+Jenkins环境安装
环境准备:1.服务器: CentOS 72.yum 3.4.33.java 1.84.tomcat5.jenkinsyum环境rpm -qa | grep yum 查看系统是否安装已安装yum环境,如截图,已安装,后面我们可以直接使用yum来安装我们所需要的环境java环境yum list | grep java-1.8.0-openjdk 在...
2019-07-10 08:43:28
661
原创 Python爬虫-17-案例:利用爬虫框架scrapy ,爬取JavaScript动态加载网页,将图片下载至本地
新建项目1)在cmd中创建爬虫项目2)项目结构(由于基础模板设置这里会默认新建一个images.py文件,不设置的话这边可以直接写也是可以的)3)设置settings图片下载地址分析1)查看萌女最新选项的图片2)查看请求信息,发现规律3)浏览器打开urlhttp://image.so.com/zjl?ch=beauty&sn=0...
2019-07-09 08:42:32
1915
原创 Python爬虫-16- pytesseract验证码识别
pytesseractpytesseract是Python的一个OCR识别库,OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容。pytesseract其实是对tesseract做的一层Python API封装...
2019-07-02 15:54:52
2418
原创 Python基础-46-邮件发送(带附件)
前言前面一篇主要是只发送纯文本情况,很多时候我们发送邮件都是带附件发的,比如带doc、xlsx、MP3等等MIMEMultipart/MIMEApplication带附件发送import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfro...
2019-07-01 15:02:35
1561
原创 Python基础-45-邮件发送(纯文本)
前言之前有过发送邮件的介绍(python发送邮件),这里更为详细整体的梳理一下SMTP1)SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。2)SMTP 是建立在 TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。3)SMTP是发送邮件的协议,Python内置会对SMTP的支持,可以发送纯文本邮件、HTM...
2019-07-01 15:02:19
740
原创 Python+Selenium-18-富文本
前言简单的文本输入框,如input、textarea框直接定位到元素后send_keys就可以了;富文本一般是嵌入在iframe页面中提交的,iframe中一般是一个空的html,其中显示的内容即是body中的内容。以csdn写博客为例右击查看思路(步骤)1)基于上一篇讲解的,可以用到加载配置文件方式来免登陆操作(毕竟登录也是挺麻烦的还有图片验证啥的)2)点...
2019-06-21 17:28:31
624
原创 Python+Selenium-17-加载chrome配置文件
前言在做selenium ui自动化的时候,我们可以加载浏览器的配置文件来保持登录状态(会话)等,即我们可以加载后直接操作,无需再次进行登录操作怎么查看配置文件存放路径打开浏览器输入:chrome://version/下发的个人资料路径如下,我们可以copy一下查看文件夹代码部分# coding:utf-8from selenium import ...
2019-06-20 12:30:28
613
原创 Python+Selenium-16-iframe标签
前言有时候明明我们有正确定位元素,但是执行时还会报错说元素不存在,这时候就要去看看是不是页面有iframe或者frame标签了。iframe标签正常用在表单提交的地方,如登录页面等qq空间登录为例地址:https://qzone.qq.com/查看页面元素,都含有id,可以直接使用id来定位代码如下(此处还没有去处理iframe标签的问题)from selen...
2019-06-19 17:20:10
412
原创 Redis-8-redis其他常用操作
常用操作delete(*names):删除对应name的string、list、hash、set、sorted setexists(name):判断redis的name是否存在,存在返回1,不存在返回0import redisr = redis.Redis()r.set("s001","suner")r.lpush("l001",10)r.delete("s001")pr...
2019-06-10 09:48:08
235
原创 Redis-7-redis操作有序集合(sorted sets)
前言在集合的基础上,为每元素排序,元素的排序需要根据另外一个值来进行比较,所以,对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序。有序集合常用方法zadd(name, mapping):在name对应的有序集合中添加元素,元素为mapping格式,即dict格式zcard(name):获取对应name的有序集合中的元素数量zcount(name, min...
2019-06-10 09:47:57
293
原创 Redis-6-redis操作集合(sets)
前言set集合就是不重复的列表sets常用方法sadd(name,values):给name对应的集合添加元素smembers(name):获取name对应集合的所有元素scard(name):获取name对应集合的个数(集合长度)import redisr = redis.Redis()r.sadd("set001",1)r.sadd("set001",2...
2019-06-10 09:47:38
215
原创 Redis-5-redis操作列表(lists)
前言redis中的List在在内存中按照一个name对应一个List来存储lists常用方法lpush(name,values):在对应name中list的左边添加一个或多个元素lindex(name, index):根本索引值取list中的元素import redisr = redis.Redis()r.lpush("list001",10)r.lpush(...
2019-06-10 09:47:23
570
原创 Redis-4-redis操作散列(hashes对应的字典)
前言redis中的Hash在内存中类似于一个name对应一个dict来存储hashes常用方法hset(name, key, value) :设置一个hash值hget(name,key) :获取name对应key的valuehgetall(name) :获取name对应的所有键值对import redisr = redis.Redis()# name(此...
2019-06-05 13:52:47
197
原创 Redis-3-redis操作字符串(strings)
strings常用方法set():设置值,name不存在就直接设置,name存在即修改name对应的值get(name):获取值import redisr = redis.Redis()r.set("name","suner")print(r.get("name").decode()) # 结果:sunermset():”设置多个值mget(keys, *a...
2019-06-05 10:21:00
200
原创 Redis-2-python连接redis
安装redis安装教程1:windows环境安装redis安装教程2:Centos7环境安装redispython环境安装redis在python中,要操作redis,目前主要是通过一个python的redis模块来实现安装:pip install redispython连接redis前提:因为我的redis是安装在win上的,所以,使用redis,必须先启...
2019-06-05 10:20:09
1511
原创 Redis-1-redis基础
redis简介Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的APIRedis是 NoSQL(nosql中存储的数据都是key-value形式)技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色redis特性1)R...
2019-06-05 10:19:31
162
原创 环境安装-11-Centos7之Redis安装
安装步骤1)yum install epel-release下载fedora的epel仓库2)yum install redis -y 安装redis3)systemctl start redis 启动redisnetstat -antup | grep 6379 查看redis默认端口4)vim /etc/redis.conf设置...
2019-06-05 10:18:12
260
原创 Python爬虫-15-案例:爬取手机壁纸网址所有图片(三)
前提:本篇结合多线程threading模块来爬取,可以大大缩短下载时间脚本# coding:utf-8import osimport timeimport threadingimport requestsfrom lxml import etreecur_path = os.path.dirname(__file__)file_path = os.path.jo...
2019-06-04 11:52:43
453
原创 Python爬虫-14-案例:爬取手机壁纸网址所有图片(二)
前提基于前一篇的爬取结果,图片是下载下来了,但是有一个问题是,每张图片都很小如截图,打开后是这样的,本篇继续优化,起码保证下载下来的图片可以正常使用哈分析1)打开图片页面后,发现上面有尺寸显示,不同尺寸大小不同2)右击查看我们这里下载的都是默认的120*90的大小3)思考:将这里的尺寸直接替换成我们想要的即可,我这里选的是640*960(在页面看这个尺寸大小...
2019-06-04 11:52:36
393
原创 Python爬虫-13-案例:爬取手机壁纸网址所有图片(一)
前提爬取页面中的最新壁纸的所有图片,并以图片分类的名称保存在相应的文件夹下页面分析1.整体页面:请求第一个页面的地址:http://sj.zol.com.cn/bizhi/new_1.html点击下一页,发现第二个页面的地址:http://sj.zol.com.cn/bizhi/new_2.html由此可以看出,想要爬取指定页面,传递相应的数字给new_后面的数字即可...
2019-06-04 11:52:28
1469
原创 Python+Appium-7-xpath定位
前言定位方式优先选择id --> class(一个页面没有重复的) --> name --> xpathxpath定位这里的关注、推荐、热榜、小说class都一样,所以不便于用class来定位,我们可以用xpath来定位到“热榜”这个元素,并执行点击操作,因为他们的text不一致,所以可以用text来做xpath定位热榜的xpath值为://*[@text='热榜...
2019-06-04 10:46:28
544
原创 Python+Appium-6-class定位
前言基于前一篇的id和name定位的案例,本篇就针对class定位来实现百度搜索功能class定位class定位就是通过UI Automator工具查看的class属性第一个页面搜索框的class值:android.widget.TextView点击后第二个页面的搜索框class值:android.widget.EditText百度一下按钮的class值:androi...
2019-06-04 08:25:04
797
原创 Python+Appium-5-id和name定位
id定位格式:driver.find_element_by_id("resource-id")name定位格式:driver.find_element_by_name("text")查找元素打开百度搜索,需要先定位到搜索框(通过name定位),执行点击操作定位到输入框(通过id定位)脚本编写from appium import web...
2019-05-30 13:56:25
1430
原创 Python+Appium-4-元素定位工具UI Automator Viewer
前言App-UI跟Web-UI自动化操作一样,无非就是定位到元素后去操作元素,本篇介绍一下sdk自带的定位元素工具uiautomatorviewerUI Automator Viewer定位打开uiautomatorviewer启动uiautomatorviewer打开测试app后点击上方第二个按钮device screenshot使用uiauto...
2019-05-30 13:56:02
610
原创 Python+Appium-3-启动百度app
前言针对app的操作本系列都在安卓模拟器完成本篇完成利用脚本来实现启动app的操作,基于前一篇自动化原理的介绍,我们启动app首先需要拿到一些必要的参数必要参数准备第一步:获取设备名称cmd执行adb devices ,获取到设备名为:127.0.0.1:62001aapt工具获取apk包名和launcherActivity1)将测试的apk放在某个目录...
2019-05-30 13:55:42
5047
原创 Python+Appium-2-自动化脚本原理
添加配置创建DesiredCapabilities对象,添加如下必需的配置信息:●deviceName (通过adb devices 获取设备)●appPackage (hierarchyviewer高亮显示的为当前app的)●appActivity创建驱动找到页面元素调用驱动对象driver的相关api:通过adt--sdk--tools-uiaotumator...
2019-05-30 13:55:19
469
原创 Python+Appium-1-环境搭建
安装环境所需python3(python安装教程)Java JDK (JDK安装教程).netFrameworknodejsandroid SDK(SDK安装教程)appiumAppium-Python-Client安装.netFramework下载地址:https://www.microsoft.com/en-us/download/confirmat...
2019-05-30 13:55:02
390
6
原创 Python基础-44-装饰器详解
前言装饰器的简单功能在前面已经有过介绍(装饰器基础),本篇详细介绍一下装饰器的作用被装饰函数不带参数代码部分:# 在每个函数执行前打印出执行的函数名称def print_log(func): def wrapper(): print("当前执行的函数名为:",func.__name__) func() return wr...
2019-05-28 08:44:11
219
原创 Python基础-43-Super()使用
前言在面向对象-继承部分已经有过super继承的使用,这里独立出来梳理一下格式:super().方法(参数) # 对python3有效Super()代码部分:# super()继承class People(): def __init__(self,name,age): self.name = name self.age = ...
2019-05-27 14:17:14
174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人