#! /bin/env python3
import os import sys import re import subprocess import shutil import wget
from concurrent.futures import ThreadPoolExecutor from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
mouse#
from selenium.webdriver.common.action_chains import ActionChains
PATH_DOWNLOAD = ‘/dev/shm/’ PATH_WORK = ‘UnGoogleDownload’ PATH_INSTALACAO = ‘/opt/ungoogled_chromium/’
def dir_create( dir_user ): if not os.path.exists(dir_user): os.makedirs(dir_user)
def dir_remove( dir_user ): if os.path.exists(dir_user): shutil.rmtree(dir_user) print(f’O diretório {dir_user} foi removido com sucesso, incluindo todo o seu conteúdo.’) else: print(f’O diretório {dir_user} não existe.')
def download_arquivo(url, diretorio_destino=PATH_DOWNLOAD + PATH_WORK): wget.download(url, diretorio_destino)
def config_driver (): # Configurando o navegador options = Options() options.add_argument(’–headless’) # Execução em modo headless (sem interface gráfica) options.add_argument(’–disable-gpu’) # Desabilita a aceleração de GPU # options.add_argument(’–disable-background-timer-throttling’) # options.add_argument(’–disable-backgrounding-occluded-windows’) # options = Options()
# Configurando o serviço do ChromeDriver
chrome_driver_path = '/usr/bin/chromedriver'
service = Service(chrome_driver_path)
# Inicializando o driver do Chrome
driver = webdriver.Chrome(service=service, options=options)
driver.maximize_window()
actions = ActionChains(driver)
return driver, actions
def URL_base (driver): LINK_URL = ‘https://github.com/berkley4/ungoogled-chromium-debian/releases' driver.get(LINK_URL)
def main(): global PATH_DOWNLOAD, PATH_WORK, PATH_INSTALACAO TMP_DEST = PATH_DOWNLOAD + PATH_WORK
dir_create(TMP_DEST)
driver, action = config_driver()
URL_base(driver)
atr_summary='//summary[@role="button"]'
# atr_summary='//li[@data-view-component="true"]'
atr_links="//a[@data-turbo]"
atr_sessao = "//section[@aria-labelledby]"
WebDriverWait(driver,
10).until(EC.presence_of_all_elements_located((By.XPATH,
atr_sessao)))
sessao_1 = driver.find_element(By.XPATH, atr_summary )
# Rola a página verticalmente 1000 unidades para baixo
driver.execute_script("window.scrollBy(0, 1000);")
def aguarda_Assets(driver, action, cont=0):
f = open('/tmp/git.html', 'w')
f.write(str(driver.page_source))
f.close()
try:
WebDriverWait(driver,
5).until(EC.presence_of_all_elements_located((By.XPATH,
atr_links)))
except:
atr_botao = '//summary[@role="button"]'
local_botao = driver.find_elements(By.XPATH,
atr_botao)
# Clica do 2º elemento "summary"
action.move_to_element(local_botao[1]).click().perform()
cont += 1
if (cont <=3 ):
print(f'Tentativa de acessar o elemento: {cont}/3\n\tElemento: {atr_botao} que expande a lista.')
aguarda_Assets(driver, action, cont)
else :
sys.stderr.write(f'Não foi possível localizar o elemento: {atr_botao}')
sys.exit(1)
aguarda_Assets(driver, action)
elementos_deb_package = driver.find_elements(By.XPATH,
atr_links)
# Organiza os links em lista:
# https://github.com/berkley4/ungoogled-chromium-debian/releases/download/131.0.6778.69-stable1.1/ungoogled-chromium-dbgsym_131.0.6778.69-stable1_amd64.deb'
LINK = []
for link_atual in elementos_deb_package:
LINK.append(str(link_atual.get_attribute('href')))
f = open('/tmp/git.html', 'w')
f.write(str(driver.page_source))
f.close()
driver.quit()
# VERSION = str(LINK[0]).split("/")
# Baixa usando multi treads
with ThreadPoolExecutor() as executor:
executor.map(download_arquivo, LINK)
print('Downloads concluídos.')
# Usado para descompactar no diretório /opt, não instala
# no sistema.
def DPKG_DECOMPRESS(pacote):
if pacote.endswith('.deb'):
try:
subprocess.run(['dpkg', '-X', TMP_DEST + '/' +
pacote, PATH_INSTALACAO], check=True)
print(f'O pacote {pacote} foi instalado com sucesso.')
except subprocess.CalledProcessError as e:
print(f'Ocorreu um erro ao instalar o pacote {pacote}:')
print(e.stderr)
else:
print(f'Arquivo {pacote} não suportado!!')
# Instala no sistema usando o APT, necessário remover o
# chromium!!
def APT_INSTALL( pacotes_array ):
pacotes_abs_path = []
# subprocess.run(['sudo', 'env', 'DEBIAN_FRONTEND=noninteractive','apt-get', 'purge', '-y', 'chromium*'])
# arquivos_filtrados = [arq for arq in arquivos if arq.endswith('.deb')]
for pkg_atual in pacotes_array:
# pacotes_abs_path.append(TMP_DEST + '/' + pkg_atual)
if pkg_atual.endswith('.deb'):
try:
# '''
subprocess.run(['cd', TMP_DEST])
subprocess.run(['sudo', 'env',
'DEBIAN_FRONTEND=noninteractive','apt',
'install', '-f', '-y',
# TMP_DEST +
'./*.deb'])
# TMP_DEST + '/' +
# pkg_atual])
# TMP_DEST + '/' +
#'*.deb'])
# '''
print(f'{pacotes_abs_path}')
except:
print (f'Ocorreu um erro na instalação do pacote: {pacotes_abs_path}')
else:
print(f'Arquivo {pkg_atual.split("/")[-1]} não suportado!!')
pacotes_inLine_append = []
for lista_debs in LINK:
pacote = lista_debs.split('/')[-1]
# pacotes_inLine_append.append(pacote)
# APT_INSTALL(pacotes_inLine_append)
DPKG_DECOMPRESS(pacote)
'''
try:
subprocess.run(['dpkg', '-X', TMP_DEST + '/' +
pacote, PATH_INSTALACAO], check=True)
print(f'O pacote {pacote} foi instalado com sucesso.')
except subprocess.CalledProcessError as e:
print(f'Ocorreu um erro ao instalar o pacote {pacote}:')
print(e.stderr)
'''
os.system('clear')
dir_remove(TMP_DEST)
print(f'\n\nPasta de transição: "{TMP_DEST}"\tPasta do binário: "/opt/ungoogled_chromium/usr/lib/chromium/chrome"\n\n')
# '''
# print(f'Total: {len(elementos_deb_package)}\nLinks: {elementos_deb_package.}')
if name == “main”: main()