python文档处理脚本 github_python编写脚本,登录Github通过指定仓库指定敏感关键字搜索自动化截图生成文件【完美截图】...

前言:为了避免开发人员将敏感信息写入文件传到github,所以测试人员需要检查每个仓库是否有写入,人工搜索审核比较繁琐,所以写一个脚本通过配置 配置文件,指定需要搜索的仓库和每个仓库需要搜索的关键字,生成文件

版本声明

python2.7.8

selenium 2.48.0

火狐浏览器30版本

github.ini

#登录github用户名密码

[login]usr=111pwd=222

#定义需要搜索的组织下哪个仓库

[Warehouse]Warehouse_list=[test1/projectA,test2/projectB]

#定义敏感关键字

[SensitiveKey]keyWord_list=[smtp,password,host]

[email]from_email=[]to_email=[]

上脚本

[RunScripts.py]

# coding:utf-8

from selenium import webdriver

import time

import os

import datetime

import smtplib

from email.mime.text import MIMEText

import ConfigParser

import zipfile

from email.mime.application import MIMEApplication

import email.mime.multipart

import email.mime.text

class conf_git():

def ini_list(self,value):

w_len = len(value)

str_o = w_len - 1

value_str = value.replace(value[0], '')

value = value_str.replace(value[str_o], '')

value_list = value.split(',')

return value_list

def _take_dict(self):

cf = ConfigParser.ConfigParser()

cf.read('github.ini')

save_body={

"name":None,

"pwd":None,

"Warehouse":None,

"SensitiveKey":None,

"from_email":None,

"to_email":None

}

try:

login_usr=cf.get("login","usr")

login_pwd = cf.get("login", "pwd")

from_email = cf.get("email", "from_email")

from_email_list=self.ini_list(from_email)

to_email = cf.get("email", "to_email")

to_email_list = self.ini_list(to_email)

# 读需要搜索的仓库转换list

Warehouse = cf.get("Warehouse", "Warehouse_list")

Warehouse_list=self.ini_list(Warehouse)

# 需要搜索的敏感关键字

SensitiveKey = cf.get("SensitiveKey", "keyWord_list")

SensitiveKey_list = self.ini_list(SensitiveKey)

save_body['name']=login_usr

save_body['pwd'] = login_pwd

save_body['Warehouse'] = Warehouse_list

save_body['SensitiveKey'] = SensitiveKey_list

save_body['from_email']=from_email_list

save_body['to_email'] = to_email_list

conf_dic=save_body

except Exception as errorLog:

print("读写错误,文件配置没有找到或没有匹配项")

return False

else:

return conf_dic

finally:

pass

class _serch_git(conf_git):

def __init__(self):

conf_dic=self._take_dict()

self.Warehouse_list=conf_dic['Warehouse']

self.SensitiveKey_list = conf_dic['SensitiveKey']

self.name=conf_dic['name']

self.pwd = conf_dic['pwd']

self.from_email=conf_dic['from_email']

self.to_email = conf_dic['to_email']

def get_time(self):

nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 现在

nowTime = str(nowTime)

nowTime_str = nowTime.replace(' ', '')

nowTime = nowTime_str.replace(':', '-')

yymm = nowTime[0:10]

hhmm = nowTime[10:]

file_time=yymm + '-' + hhmm

nowTime='reportIMG'+yymm + '-' + hhmm

return nowTime,file_time

def mkdir_file(self):

nowTime = self.get_time()[0]

for dir_f in self.Warehouse_list:

for dir_key in self.SensitiveKey_list:

if '/' in dir_f:

dir_f=dir_f.replace('/','$')

else:

pass

pr_files = nowTime + '/' + dir_f + '/' + dir_key

os.makedirs(pr_files)

return nowTime

def _login_git_serch(self):

file_master=self.mkdir_file()

self.Warehouse_lists=self.Warehouse_list

self.SensitiveKey_lists=self.SensitiveKey_list

driver = webdriver.Firefox()

driver.get('https://github.com/login')

driver.maximize_window()

driver.find_element_by_id('login_field').send_keys(self.name)

driver.find_element_by_id('password').send_keys(self.pwd)

driver.find_element_by_name('commit').click()

time.sleep(3)

_current_file=os.path.split(os.path.realpath(__file__))[0]

file = self.get_time()[1]

for Warehouse in self.Warehouse_lists:

git_url = 'https://github.com/' + Warehouse

for SensitiveKey in self.SensitiveKey_lists:

git_urls = git_url+ '/search?q=' + SensitiveKey + '&unscoped_q=' + SensitiveKey

driver.get(git_urls)

# time.sleep(1)

if '/' in Warehouse:

Warehouse_file=Warehouse.replace('/','$')

else:

Warehouse_file=Warehouse

try:

all_page_ele = driver.find_element_by_xpath('//*[@id="code_search_results"]/div[2]/div/em')

all_page = all_page_ele.get_attribute('data-total-pages')

# print(all_page)

except:

# print (unicode('只有一页数据:', 'utf-8'))

# driver.save_screenshot(_current_file + '\\' +file_master+ '\\'+Warehouse_file + '\\'+SensitiveKey +'\\'+ file + '.png')

driver.save_screenshot(_current_file + '\\' + file_master + '\\' + Warehouse_file + '\\' + SensitiveKey + '\\' + Warehouse_file+ SensitiveKey+ '1.png')

# print (unicode('截图完成:', 'utf-8'))

else:

true_ele = str(all_page)

# print(true_ele)

true_ele_int = int(true_ele)

# print(true_ele_int)

for pages in range(1,true_ele_int+1):

file = self.get_time()[1]

driver.get('https://github.com/' + Warehouse + '/search?p=' + str(pages) + '&q=' + SensitiveKey + '&type=&utf8=%E2%9C%93')

# driver.save_screenshot(_current_file + '\\' +file_master+ '\\'+Warehouse_file + '\\'+SensitiveKey +'\\'+ file + '.png')

driver.save_screenshot(

_current_file + '\\' + file_master + '\\' + Warehouse_file + '\\' + SensitiveKey + '\\' + Warehouse_file + SensitiveKey +str(pages)+ '.png')

# print(_current_file + '\\' +file_master+ Warehouse_file + '\\'+SensitiveKey +'\\'+ file + '.png')

# print a

finally:

pass

driver.quit()

print (unicode('指定仓库根据指定的关键字已截图完成', 'utf-8'))

return file_master

class sendEmail(_serch_git):

def send_forUsr(self):

file_name=self._login_git_serch()

if "" in self.to_email:

print (unicode('脚本执行完成:', 'utf-8'))

else:

print (unicode('正在打包发送邮件:', 'utf-8'))

f = zipfile.ZipFile(file_name + '.zip', 'w', zipfile.ZIP_DEFLATED)

startdir = file_name

for dirpath, dirnames, filenames in os.walk(startdir):

for filename in filenames:

f.write(os.path.join(dirpath, filename))

time.sleep(3)

# 发送邮件

self.mailserver = 'smtp.mxhichina.com'

self.username_send = self.from_email[0]

self.password = self.from_email[1]

self.user_list = self.to_email

# 主题

subject = 'Github敏感关键字自动化搜索测试报告[附件]'

# 内容

content = '具体截图请查收附件'

for usr in self.user_list:

msg = email.mime.multipart.MIMEMultipart()

msg['from'] = self.username_send

msg['to'] = usr

msg['subject'] = subject

content = content

txt = email.mime.text.MIMEText(content, 'plain', 'utf-8')

msg.attach(txt)

# 添加附件

part = MIMEApplication(open(file_name+'.zip', 'rb').read())

part.add_header('Content-Disposition', 'attachment', filename=file_name+'.zip')

msg.attach(part)

time.sleep(3)

smtp = smtplib.SMTP()

smtp.connect(self.mailserver, '25')

smtp.login(self.username_send, self.password)

try:

smtp.sendmail(self.username_send, usr, str(msg))

except:

print (unicode('邮件未发送', 'utf-8'))

else:

print (unicode('邮件发送成功', 'utf-8'))

finally:

smtp.quit()

if __name__ =="__main__":

sendEmail().send_forUsr()

else:

pass

有个问题,邮件发送后,附件经常破损,后面有时间解决

自动化生成的文件如下:

指定的仓库

指定仓库搜索的关键字

自动截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值