标签归档:python

Python操作Excel类库Openpyxl之初体验

以前尝试过通过win32com方式读写excel,Win32com调用Excel是最好的一个方式,因为直接调用的是windows平台的软件,可靠性要高一些,另外excel出错的可能性也小一些。由于win32com包怎么也找不到,于是这次尝试使用openpyxl类库读写excel,选择openpyxl的原因在于它能够读取和写入Excel文件,相对于xlrd、xlwt方便一些。

1 安装openpyxl

安装方法非常简单,直接使用pip即可:
pip install openpyxl
它能自动下载和安装openpyxl所依赖的包,然后再安装openpyxl。
但是本人使用的机器是离线的,因此只能采用离线安装的方式,经过尝试,需要下载以下安装包:
et_xmlfile
jdcal
openpyxl
上面三个安装依次下装并安装,注意版本,比如Openpyxl最新版本号是3.0.5,那么et_xmlfile和jdcal下载时应注意版本号,否则会出错。不过出错也没关系,因为出错信息中会提示所依赖包的版本号,重新下载一遍也没关系。

2 操作Excel
2.1 导入openpyxl
继续阅读Python操作Excel类库Openpyxl之初体验

浏览器自动化测试框架Selenium之初体验

登录网页,进行一些自动、批量的操作,可以显著提高工作效率,使用HTTP协议能实现这样的功能,使用按键精灵也能实现这样的功能,但是这两种方法都有自己的缺点:HTTP协议操作比较复杂,如果不精通的话,很容易提交错乱的数据,影响数据的完整性;按键精灵不存在第一种问题,它是通过模拟人工操作的方式对浏览器进行操作,但是必须使用自身所带的浏览器WQM,因此两种方式都有局限性。

最近接触到了一种类似按键精灵的软件,叫Selenium,是一种浏览器自动化测试框架,功能强大,支持多种语言、多种浏览器,而且还跨平台,本着活到老学到老的原则,迫不及待的安装了Selenium,体验了一把。

1 什么是自动化测试
自动化测试,顾名思义就是软件测试的自动化,用程序代替人工进行软件测试,提高工作效率,减少时间和人工成本。自动化测试主要用于需求变动不频繁、项目周期长、自动化测试脚本可重复使用的情况。常见的自动化测试工具有:QTP、Winner、Rational Robot、AutoRunner等等。

2 Selenium简单介绍
Selenium是一种浏览器自动化测试框架,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。

这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上;测试系统功能——创建回归测试检验软件功能和用户需求;支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

3 使用Python+Selenium实现百度自动搜索
此次尝试使用Python+Selenium自动打开浏览器,打开百度页面,填入搜索关键词,并点击”百度一下“按钮,实现自动搜索。

3.1 测试环境
操作系统:Ubuntu Kylin 16.04
脚本语言:Python 2.7.12
Selenium版本:Selenium-3.141.0
浏览器:Chromium 76.0.3809.100-0ubuntu0.16.04.1 amd64

3.2 安装过程

安装Python
使用Ubuntu系统的优点是,安装软件只需执行:
sudo apt install <软件名称>
因此,安装Python,只需执行下面的使命令:
sudo apt install python

安装Selenium

Selenium支持多种语言,此次使用Python,直接安装Python语言的Selenium包即可:
pip install selenium

安装Selenium的浏览器驱动Chromedrive

注意针对不同游览器有不同的版本,同样的浏览器也有不同的版本,一定要分清楚。此次使用的浏览器是:Chromium 76.0.3809.100-0ubuntu0.16.04.1 amd64,因此要选择相匹配的Chromedriver版本,下载地址:
http://chromedriver.storage.googleapis.com/index.html
下载之后,将chromedriver移动到下面的目录:
/home/alex/chromedriver
注意存放位置,后面要调用。
添加可执行的权限:
chown 755 /home/alex/chromedriver

编写自动化脚本
# coding=utf-8
from selenium import webdriver
from selenium.webdriver import ActionChains
import os
chromedriver=’/home/alex/chromedriver’
browser = webdriver.Chrome(chromedriver)
browser.get(“http://baidu.com”)
keyword=browser.find_element_by_id(“kw”)
actions=ActionChains(browser)
actions.send_keys_to_element(keyword,”dachengge.com”)
actions.perform()
##关闭浏览器
##browser.close()

PYTHON学习:使用POP3协议下载邮件

以前使用电脑端访问邮箱时,知道有POP3、SMTP协议,随首技术的发展,最近又有了很多种选择,尤其是手机端,看到了每多种连接方式,比如IMAP、EXCHANGE方式,邮件还带同步的,比如电脑端改变了邮件,手机端也同步了,因此想写几篇文章学习一下这些协议和新的技术,此次看的是POP3协议。
POP3是Post Office Protocol – Version 3的简写,中文意思是简单邮局协议(版本3),它是由RFC1939文件描述的。POP3协议的作用是动态地从服务器上下载邮件,然后删除服务器上的邮件(新版的POP3可以不删除),除此之外,POP3协议并没有提供更多的对于邮件的操作。相应的,有一种更高级的IMAP4协议,能够支持对邮件更多的操作。
下面是POP3协议所支持的命令:

命令
描述
USER [username]
处理用户名
PASS [password]
处理用户密码
APOP [Name,Digest]
认可Digest是MD5消息摘要
STAT
服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL [Msg#]
处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST [Msg#]
处理返回邮件数量和每个邮件的大小
RETR [Msg#]
处理返回由参数标识的邮件的全部文本
DELE [Msg#]
处理服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET
处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP [Msg# n]
处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP
服务器返回一个肯定的响应
QUIT
终止会话

继续阅读PYTHON学习:使用POP3协议下载邮件

PYTHON学习:行的划分和注释

PYTHON程序由一系列逻辑行组成,每一逻辑行由NEWLINE结尾,同时,逻辑行又由物理行通过显示或者隐式连接组成。物理行由一系列字符组成,以换行符结尾,换行符在UNIX系统中是LF,在WINDOWS系统中是CR LF,在Machintosh系统中用CR来表示,无论什么平台,这些行结尾符号都可以使用,没有区别。
先看看显式得连接不同的行,也就是一行写不完如何换行写程序,在写程序时,有可能一行写不完,如果直接回车换行再写,会出错,正确的做法是在要换和f的地方输入\,然后在下一行接着写,否则就会出错:
if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <=31
return 1
隐式地连接不同的行,是指系统自动地认为不同行的内容为同一个逻辑行的情况,这些情况是指在一对括号、花括号、中括号中的内容,不用\换行:
month_names = [‘Januari’, ‘Februari’, ‘Maart’,
‘April’,   ‘Mei’, ‘Juni’  ] 继续阅读PYTHON学习:行的划分和注释

PYTHON学习:不同的PYTHON实现

PYTHON有很多不同的实现,每种实现都有一系列的内置和标准的模块,最常见的是CPython,也就是大家常常说的Python,但同时PYTHON还有很多种实现,这些不同的实现满足了不同的使用者的需求,面就是PYTHON的几种常见的实现:
CPython 是最原始、维护得最多的一种PYTHON实现,使用C语言编写,每当有新的特点、特性出现时,CPython最先更新。
Jython 是在JAVA中实现的PYTHON,这种实现可以当作JAVA应用的一个脚本语言,或者可以用来创建调用JAVA类库的应用,它常常用来创建JAVA类库的测试程序。
Python for .NET 使用了CPython的实现方式,与CPython不同的是它是一个可管理的.NET应用,可以使用.NET类库。
IronPython 也是一种.NET实现的PYTHON,与Python for .NET不同,它能够将Python代码编译成.NET汇编。
PyPy 完全使用Python实现的Python,它支持其它几种实现都没有的特性,比如StacklessJust in Time compiler,这使得它的运行速度比CPython快,也可以安全得运行一些不被信任的代码。

PYTHON中UTF-8向GB2312编码转换的问题一解

最近用PYTHON写程序时,遇到了编码的问题,经过一段时间的困扰,终于弄明白并且顺利解决了,要不说实践出真知。首先说说编码的事,在计算机中存在着多种编码类型,比如utf-8、unicode、ascii、gb2312等等,这几种比较常见,所以说拿这几种类型说事。
博主遇到的问题是:在EXCEL中读取数据,然后将数据用POST方法提交到某网站,相当于自动填写表格。从EXCEL读取的数字型数据都能正常提交到目标网站,但是汉字就出现了乱码,经过仔细研究终于发现了问题所在。
首先,我的脚本开头写了# -*- coding: utf-8 -*-,也就是指定了PYTHON脚本的编码是utf-8格式的,从EXCEL中读取的数据应该也是utf-8格式的,目标网站的网页是gb2312编码的,估计问题就出在这编码上了,数字之所以没出问题,是因为数字用utf-8和gb2312编码是一样的,汉字就不一样了,以utf-8格式的汉字向gb2312编码的网页上提交数据,汉字就成乱码了。
于是就将这些utf-8的数据转换成gb2312格式的:str=str. encode(“gb2312”),然后再提交,汉字果然都正常提交到目标网站了。PYTHON的编码问题比较头疼,在PYTHON IDE编辑器(windows版)里面默认是ascii编码,可以使用sys.getdefaultencoding()来获取当前的编码类型,也可以通过sys.setdefaultencoding(‘utf-8’)来改变默认的编码类型。把这些编码的问题搞明白了,PYTHON里面就没有乱码的问题了。

python lambda 表达式

lambda表达式是python中一类比较特殊的声明函数的方式,lambda来源于LISP语言。
使用它可以声明一个匿名函数,所谓匿名函数是指声明的函数没有函数名,lambda就是一个简单的函数。
使用lambda声明的函数返回一个值,调用函数直接使用匿名函数(lambda声明的函数)的返回值。