Python是门挺强大的语言,同常见的C,Java,C#等有几点不同,一个是定义变量前不用定义类型,直接赋值就行,非常方便,另一个是没有begin,end,{,}这些麻烦的东西,回车空格就是这些东西的替代;第三点就是C语言中最让人讨厌的判断语句中的==号可以在编译时直接发现写成=的情况了。
目前Python使用最多的一个是网页的自动化测试,另一个是数据分析。我最近抽空学习了下自动化测试。Python的自动化测试用的是selenium模块,可以模拟Chrome,IE,FireFox等浏览器,但是要下载对应的模拟执行文件先。下载好后,就可以模拟浏览器进行自动化测试了。下面是学习笔记。
(一)首先是文件开头上要写
from selenium import webdriver #引入selenium模块。
from selenium.webdriver.common.keys import Keys #模拟键盘输入。
import random,time #经常要用到,一个是产生随机数,一个是时间操作的功能
(二)最简单的一段功能:
browser = webdriver.Chrome() #启动chrome浏览器
time.sleep(3) #停顿3秒
browser.maximize_window() #浏览器窗口最大化
OutputLogin = Login(browser,username, password) #登录网页的函数,后续讲解
time.sleep(int(random.uniform(1, 10)))#随机产生一个1到9秒的随机整数,然后等待这个时间
browser.quit() #退出浏览器
(三)定义一个登录系统的函数
def Login(browser,username, password): #要有冒号
browser.get('网页的URL') #浏览器登录网页的URL
time.sleep(3)
try:
# find user login input box
elem_user=browser.find_element_by_id("username")
#这个是通过find_element_by_id函数来寻找定位网页上的id为username的控件
elem_user.clear()
elem_user.send_keys(username)
#然后向这个控件发送username的值
time.sleep(1)
# find pwd input box
elem_pwd=browser.find_element_by_id("password")
elem_pwd.clear()
elem_pwd.send_keys(password)
time.sleep(1)
# enter RETURN in pwd box to activate
elem_pwd.send_keys(Keys.RETURN)
#然后向这个控件发送回车键,注意,如果是键盘上的回车,SHIFT,CONTROL键之类的,要用Keys.控制键的名称作为输入。
return username " login successfully \n"
except:
return username " login failed \n"
pass
python是非常简洁的语言,函数之类的都没有begin,end,{,}这些麻烦的东西
(四)定位元素
自动化测试中常用的功能是通过各种元素,例如id,class,xpath,css等内容来寻找定位元素,而且不光可以定位一个元素,还可以定位一队元素,然后逐个操作。
#定义一个定位操作单个元素的函数
def Signup_Click(browser):
input3 = browser.find_element_by_class_name("checkbtn")
try:
input3.click()
return "Signup successfully \n"
except:
return "Signup failed \n"
pass
#定义一个定位操作多个元素的函数
def Love_Clicks(browser,k):
inputs2 = browser.find_elements_by_class_name("love")
#注意,是elements,不是element,复数形式
for input2 in inputs2:
try:
input2.click()
except:
pass
return str(i)+" Love successfully \n"
(五)键盘和鼠标操作
Python也可以模拟鼠标和键盘的操作,不过要注意的是键盘带来的屏幕游标位置的挪动和鼠标在屏幕上的挪动位置,两个是不同的。
首先要在文件头引入
from selenium.webdriver.common.action_chains import ActionChains
#定义一个函数
def Transfer_Clicks(browser):
browser.execute_script("window.scrollBy(0,-document.body.scrollHeight)","")
#这个是执行一段Javascript函数,将网页滚到到网页顶部。
try:
inputs1 = browser.find_elements_by_class_name("feedAttr_transfer")
for input1 in inputs1:
try:
ActionChains(browser).click(input1).perform()
#模拟鼠标点击控件input1,此时的鼠标位置在input1处
browser.execute_script("window.scrollBy(0,200)","")
#向下滚动200个像素,鼠标位置也跟着变了
ActionChains(browser).move_by_offset(0,-80).perform()
#向上移动鼠标80个像素,水平方向不同
ActionChains(browser).click().perform()
#鼠标左键点击
ActionChains(browser).key_down(Keys.TAB).perform()
#模拟tab键的输入
ActionChains(browser).send_keys(Keys.ENTER).perform()
#模拟输入ENTER键
except:
pass
except:
pass
return "Transfer successfully \n"
(六)文件操作
读取目录下所有TXT文件,并写入TXT文档中
def Write_Txt(Dist): #Dist是目录
Big_Txt = ‘111’
fw = open ('%s' %(Dist Big_Txt '.txt'),'a')
#打开Dist目录下的111的txt文件
Array=[]
for item in os.listdir(Dist): # 遍历指定目录
if os.path.isfile(Dist item) and item.endswith('.txt') : # 判断是否为.txt文件
f = open((Dist item),'r') # 打开文件
line=f.readline()#读取一行数据,如果是多行数据,就是readlines,然后在循环处理
for i in range(2):
fw.write(line) #写入文件
f.close() #关闭文件
fw.close()
(七)点击网页
python可以实现刷点击量的功能,用webbrowser就行
首先文件头引入
import os,time,sys,re,random
import webbrowser
#定义打开网页
def Open_Blog(k,j):
lines = open('e:\\temp.txt').readlines() #打开文件,读入每一行的URL地址
for s in lines:
if s.find(URL)>0:
UrlTemp = URL
for m in range(j): #轮询次数
webbrowser.open_new_tab(UrlTemp)##打开新的网页tab页
time.sleep(int(random.uniform(1, k)))#随机等待一定时间
os.system('taskkill /F /IM 360chrome.exe')#需要定时关闭浏览器的进程,不然会死机,
OutputBlog = 'open ' str(打开数量) ' pages\n'
return OutputBlog