-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathucd_noLog.py
133 lines (123 loc) · 5.08 KB
/
ucd_noLog.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import os
from bs4 import BeautifulSoup as bs
import requests
import re
from urllib import request
import zipfile
import sys
import configparser
import ast
import shutil
import time
#TODO: Добавить логирование
SITE_URL = 'https://chromedriver.chromium.org/downloads'
DOWNLOAD_FOLDER = os.path.join(os.getcwd(), 'download')
def get_config(config_path: str, section: str) -> dict:
"""
Получаем конфиг
:param config_path: путь до файла конфигурации
:param section: имя секции
:return: возвращает словарь из options указанной секции
"""
config = configparser.ConfigParser()
config.read(config_path)
return dict(config.items(section))
def get_current_drivers(folder: str) -> list:
'''
Ищет файлы драйвера в указанной директории
:param folder: Путь к директории с драйверами
:return: версий драйверов
'''
driver_ver = []
re_dig = re.compile(r"\d+")
if os.path.exists(DRIVER_FOLDER):
for file in os.listdir(DRIVER_FOLDER):
if file.startswith('chromedriver'):
ver = re.search(re_dig, file)
if ver:
driver_ver.append(ver.group(0))
else:
print('Тут будет exc')
return driver_ver
def get_new_drivers_list(url: str, driver_ver: list) -> list:
'''
Парсим сайт с загрузками выбираем ссылки на страницу загрузки
:param url: URL
:return: список с сайтами для загрузки
'''
url_list = []
try:
page = requests.get(url)
except Exception as e:
print(e)
sys.exit(1)
soup = bs(page.text, features='html.parser')
search_string = 'chromedriver.storage.googleapis.com'
for data in soup.find_all(href=True):
link = data['href']
# Выбираем только ссылки с загрузкой и убираем note.txt
if search_string in link and 'notes.txt' not in link:
# Берем версию драйвера из URL
ver_url = link.split('=')[-1].split('.')[0]
if ver_url not in driver_ver:
url_list.append(link)
return url_list
def download_drivers(url_list, download_folder):
'''
Загрузка драйверов
:param url_list:
:return:
'''
driver_dict = {}
driver_name = r'chromedriver_win32.zip'
# Формируем словарь версия драйвер:адресс для скачивания
for url in url_list:
# Получаем версию из url
version = url.split('path=')[1].split('.')[0]
url = url.replace('index.html?path=', '')
driver_dict.update({version: url + driver_name})
# Сохраняем фаил
for ver, url in driver_dict.items():
tmp_file_name = ver + '_' + url.split('/')[-1]
#Задаем имя файла и катало гля загрузки в формате ver_...
if not os.path.exists(download_folder):
os.makedirs(download_folder)
zip_file_name = os.path.join(download_folder, tmp_file_name)
try:
request.urlretrieve(url, zip_file_name)
except Exception as e:
print(e)
def uzip_rename_move(src_folder, dst_folder):
'''
Распаковывает архив, и переименовывает фаил с перемещением
:param src_folder: Директория для загрузки
:param dst_folder: Директория куда складывать драйвера
:return:
'''
#Проверяем файлы в каталоге загрузки, ищем .zip
for file in os.listdir(src_folder):
if file.endswith('.zip'):
#Получаем версию
ver = file.split('_')[0]
#Формируем имя файла и полный путь
driver_name = 'chromedriver' + ver + '.exe'
full_path = os.path.join(src_folder, file)
with zipfile.ZipFile(full_path, 'r') as zf:
zf.extractall(DOWNLOAD_FOLDER)
time.sleep(2)
os.remove(full_path)
for file_exe in os.listdir(src_folder):
if file_exe.endswith('exe'):
try:
shutil.move(os.path.join(src_folder, file_exe), os.path.join(dst_folder, driver_name))
# os.rename(os.path.join(src_folder, file_exe), os.path.join(dst_folder, driver_name))
except Exception as e:
print(e)
if __name__ == '__main__':
config = get_config(os.path.join(os.getcwd(), 'setting.ini'), 'FOLDER')
DRIVER_FOLDER = config['driver_folder']
driver_ver_list = get_current_drivers(DRIVER_FOLDER)
url_list = get_new_drivers_list(SITE_URL, driver_ver_list)
if url_list:
download_drivers(url_list, DOWNLOAD_FOLDER)
uzip_rename_move(DOWNLOAD_FOLDER, DRIVER_FOLDER)