每天凌晨打开http去寻找并下载当日最新的daily版本,用一个5行4列的表格更新下载状态done, bat脚本的运行时间由windows去定时运行
import os, sys, io, webbrowser, time, selenium, xlrd, numpy, urllib.request, urllib.error, re, requests, document
from urllib.parse import quote
from selenium import webdriver
import selenium.webdriver.support.ui as ui
from openpyxl import load_workbook
from bs4 import BeautifulSoup
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
f = open('D:\\ver_pac_download\\result.txt', 'a')
sys.stdout = f
nowtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
def open_chrome():
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["enable-logging"])
driver = webdriver.Chrome(options=options)
return driver
def open_url(url, driver):
driver.get(url)
req = urllib.request.Request(url)
webpage = urllib.request.urlopen(req)
html = webpage.read()
return html
def get_first_tag_fun(html):
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
flag = soup.find(attrs={"update-parent-class":".build-row"})
for i in flag:
i = str(i)
str1 = i
print(str1, flush=True)
print(nowtime)
data = str1.strip('#').strip()
print(data, flush=True)
print(nowtime)
return data
def get_daily_build():
str1 = "daily build"
if str1 in driver.page_source:
return True
else:
return False
def open_daily_build(url, data, driver):
url = url + str(data)
open_url(url, driver)
while True:
flag = get_daily_build()
if flag:
url = driver.current_url
print("daily build node be found", flush=True)
print(nowtime)
return url
else:
wait = ui.WebDriverWait(driver,10)
linkElem = wait.until(lambda driver:driver.find_element_by_link_text("上次构建"))
linkElem.click()
print("daily build node be not found", flush=True)
print(nowtime)
time.sleep(1)
continue
return url
def down_func(driver):
'''
while True:
#找到daily build之后点击Build Artifacts进去,如果还没有构建出来,就找上次有Build Artifacts的
try:#判断daily build的节点是否构建出来
wait = ui.WebDriverWait(driver,10)
linkElem = wait.until(lambda driver:driver.find_element_by_link_text("Build Artifacts"))
print("this node is build ok", flush=True)
print(nowtime)
break
except:#没有构建出来,就找上个构建是否构建出来
wait = ui.WebDriverWait(driver,10)
linkElem = wait.until(lambda driver:driver.find_element_by_link_text("上次构建"))
count = count + 1 #计数从daily build开始向前找了几个节点
linkElem.click()
print("this node is not build ok", flush=True)
print(nowtime)
time.sleep(1)
continue
#从有Build Artifacts的节点处,再往前走回去找daily build的Images_FullCode
'''
time.sleep(1)
wait = ui.WebDriverWait(driver,10)
linkElem = wait.until(lambda driver:driver.find_element_by_link_text("Images_FullCode"))
linkElem.click()
read_pac_inf(driver)
def read_pac_inf(driver):
try:
wb = load_workbook('D:\\ver_pac_download\\version_config.xlsx')
sheets = wb.worksheets
print(sheets, flush=True)
print(nowtime)
except:
print("There is no excel name version_config.xlsx\n Please cheek", flush=True)
print(nowtime)
sheet1 = sheets[0]
print(sheet1, flush=True)
print(nowtime)
sheet1 = wb.active
row = 14
for i in range(2, row):
downflag = sheet1.cell(i, 5).value
if (sys.argv[1] == downflag):
data = sheet1.cell(i,2).value
if data is None:
print("this pac is not ok", flush=True)
print(nowtime)
continue
flag = sheet1.cell(i,4).value
if flag is not None:
print("this pac is download yet \n", flush=True)
print(nowtime)
continue
time.sleep(1)
linkElem = driver.find_element_by_link_text(data)
print(linkElem, flush=True)
print(nowtime)
linkElem.click()
time.sleep(1)
data = sheet1.cell(i,3).value
wait = ui.WebDriverWait(driver,10)
linkElem = wait.until(lambda driver:driver.find_element_by_link_text(data))
print(linkElem, flush=True)
print(nowtime)
linkElem.click()
time.sleep(3)
try:
sheet1.cell(row = i, column = 4).value = 'done'
wb.save('D:\\ver_pac_download\\version_config.xlsx')
print("save is ok", flush=True)
print(nowtime)
except:
print("save is failed", flush=True)
print(nowtime)
time.sleep(3)
driver.back()
time.sleep(1)
if __name__=="__main__":
url = "http://pubbuild.unisoc.com:8080/jenkins/job/sprdroid12_trunk/"
driver = open_chrome()
html = open_url(url, driver)
data = get_first_tag_fun(html)
url = open_daily_build(url, data, driver)
str1 = "/artifact/"
url = url + str1
open_url(url, driver)
down_func(driver)
print("+++++++++++++++++++++++++分割+++++++++++++++++++++++++++++++++++\n\r")
f.close()
@echo off
::choice /t 10 /d y /n >nul
echo satrt run down.py
python D:\ver_pac_download\down.py %*
exit