Package: almaviva
Almaviva | Biblioteca PythonBiblioteca Python Almaviva com funções personalizadas para uso geral (pip install almaviva)Executando o programaPara usar esta biblioteca, basta instalar via PIP e posteriormente realizar a importação para dentro do código-fonte do seu projeto.pipinstallalmavivaPara instalar a biblioteca na versão anteriormente publicada, acrescente "==1.1.0" na frente do nome do pacote que está instalando, ex.:pipinstallalmaviva==1.4.8Para instalar a biblioteca do repositório de testes do PyPI, execute:pipinstall-ihttps://test.pypi.org/simple/almavivaAmbiente virtualPara criar a máquina virtual, caso não tenha sido criado a pasta.venvpor parte do download do template python (tutorial acima), vá até a pasta que contém os arquivos deste projeto e execute, no PowerShell:python-mvenv.venv--clear;.venv/scripts/activate;Para que os passos acima sejam executados com sucesso, será necessário revisar a política de execução do scripts do PowerShell (no modo de administrador). Então, execute, no PowerShell:Get-ExecutionPolicy-ListCasoScope ExecutionPolicyno itemLocalMachineesteja diferente deRemotesigned, execute, no PowerShell:Set-ExecutionPolicy-ExecutionPolicyRemotesigned-ScopeLocalMachineModo de operação do módulo: DatabaseImportação da bibliotecaRealize a importação para dentro do código-fonte do seu projetofromalmaviva.databaseimportDatabaseManipulando banco de dadosCrie a conexão com o servidor e informe o nome do banco de dados principalConfigurando a conexão usando autenticação windows (trusted connection):server='__servidor__'# Ex.: r'servidor1\instancia1'database='__banco__'# Ex.: 'Assets'db=Database(server,database)db.connect()Configurando a conexão usando autenticação de usuário:server='__servidor__'# Ex.: r'servidor1\instancia1'database='__banco__'# Ex.: 'Assets'username='__usuario__'# Ex.: 'User1'password='__senha__'# Ex.: 'Senha1'db=Database(server,database,username,password)db.connect()Opcionamente podemos configurar a versão dodriverque está instalado no sistema operacional, adicionando a configuração abaixo. Por padrão, se não informandodriver=Noneé utilizadoODBC Driver 13 for SQL Serverdriver='ODBC Driver 13 for SQL Server'db.set_driver(driver)A opção de logging/debug no terminal pode ser ativado simplesmente acrescentando a condição abaixo no seu código:Por padrão, esta condição é desabilitadadb.set_debugging(activated=True)Exemplos dos métodos SQL para manipulação de dadosSELECT:query='__select * from [...]__'resultado=db.select(query)INSERT:query='__insert [...] (__campos__) values [...] ou select [...]__'db.insert(query)DELETE:query='__delete [...] from [...]__'db.delete(query)UPDATE:query='__update [...] set [...]__'db.update(query)STORED PROCEDURE:params='__parametro1__','__parametro2__'procedure='[__banco__].[__schema__].[__procedure__]'db.execute_sp(stored_procedure=procedure,param=(params))Modo de operação do módulo: FileImportação da bibliotecaRealize a importação para dentro do código-fonte do seu projetofromalmaviva.fileimportFilesManipulando pastas e arquivos via PythonPrimeiro crie uma instancia do objeto, executando um dos seguintes códigos abaixo:Podemos iniciar a instância informando um caminho ao qual os arquivos serão manipulados por esta função:folder=Files(tempfolder=r'C:\_automacao\')Ou, quando não for informado o caminho da pasta que está querendo mapear, o código criará uma pasta com nome randômico nas pastas temporárias do sistema operacioal%tmp%folder=Files(tempfolder=None)print(folder.get_folder_path())Posteriormente podemos configurar outro caminho de pasta, nesta mesma instância, executando:folder.set_folder_path(tempfolder='__outra pasta__')Procurar e/ou listar arquivos do diretórioLista todos os arquivos do diretório mapeado de uma determinada instância é fácil, basta executar o código abaixo:folder.list_files()Mas, se quiser localizar uma pasta ou arquivo específico podemos usar:Aqui podemos usar caracteres coringas para localizar parte do nome do arquivo ou pastafolder.search_path_or_file(name_or_pattern_to_search='*')Excluir os arquivos da pastaPodemos executar o código abaixo para excluir TODOS os arquivos e pastas que existirem na pasta mapeada em uma determinada instânciafolder.delete_all_files()Também temos a possibilidade de excluir um arquivo específico, executando:folder.delete_file(file_name='__arquivo1.xlsb__')Mover arquivos de um diretório para outroSe quiser mover todos os arquivos de um diretorio, basta executar:Aqui recomenda-se usar a funçãoto_folder=folder2.get_folder_path()de outra instância para evitar exceções na execução do códigofolder.move_all_files(to_folder='__nova pasta__')Mover um arquivo específico de um diretório para outro:Aqui recomenda-se usar a funçãofile_name=folder.search_path_or_file('__arquivo1__.xls*')[0]da mesma instância e também o exemploto_folder=folder2.get_folder_path()de outra instância para evitar exceções na execução do códigofolder.move_file(file_name='__arquivo1.xlsb__',to_folder='__nova pasta__')Copiar arquivos de um diretório para outroSe quiser copiar todos os arquivos de um diretorio, basta executar:Aqui recomenda-se usar a funçãoto_folder=folder2.get_folder_path()de outra instância para evitar exceções na execução do códigofolder.copy_all_files(to_folder='__nova pasta__')Copiar um arquivo específico de um diretório para outro:Aqui recomenda-se usar a funçãofile_name=folder.search_path_or_file('__arquivo1__.xls*')[0]da mesma instância e também o exemploto_folder=folder2.get_folder_path()de outra instância para evitar exceções na execução do códigofolder.copy_file(file_name='__arquivo1.xlsb__',to_folder='__nova pasta__')Modo de operação do módulo: IHMImportação da bibliotecaRealize a importação para dentro do código-fonte do seu projeto:fromalmaviva.ihmimportHUNamesPara obter o nome da máquina e o usuário atualmente conectadoPrimeiro crie uma instancia do objeto, executando:huname=HUNames()Para saber o usuário atualmente conectadousername, execute:print(huname.get_username())Para saber o nome da máquinahostname, execute:print(huname.get_hostname())Para saber a versão do Python instalado no sistema, execute:print(huname.get_app())Modo de operação do módulo: LOGGINGImportação da bibliotecaRealize a importação para dentro do código-fonte do seu projetofromalmaviva.loggingimportLoggingRegistrando eventos de logCrie uma instancia do objeto antes de iniciar os registros, executando:log=Logging()Para registrar um evento de log no nível de segurançaINFO, basta executar:log.info(description='__primeiro log__',step='__etapa1__'# Step é opcional,complete=__True_or_False__# Complete é opcional)O argumentocompletepode ser informado comTrueouFalse, porém se não informado, o sistema sempre registrará o status comoOKPara registrar um evento de log no nível de segurançaWARN, basta executar:log.warn(description='__segundo log__',step='__etapa1__'# Step é opcional,complete=__True_or_False__# Complete é opcional)O argumentocompletepode ser informado comTrueouFalse, porém se não informado, o sistema sempre registrará o status comoOKPara registrar um evento de log no nível de segurançaERROR, basta executar:log.error(description='__terceiro log__',step='__etapa1__'# Step é opcional)O status desta função sempre retornará comoOK, porém com a sinalizaçãoERROR.Opções avançadas:A opçãologging_in_dbfoi substituída na versão 1.2.1 paralogging_in_servercarregando o registro de log em texto para o servidor de processamento de log do NOC Centrallog.set_options(# Configurações padrãologging_in_file=True,debug_in_terminal=False,logging_in_server=False)Por padrão o sistema cria um arquivo de log na mesma pasta em que a aplicação está executando, para desativar isto, desabilite a opção:logging_in_file=FalsePodemos exibir todos os registros de logs deINFOatéERRORno terminal. Para fazer isto, habilite a seguinte opção:debug_in_terminal=TrueTodo registro de atividade da aplicação pode ser enviada para o servidor de processamento de log central localizado no NOC Central por padrão. Para fazer isto, habilite a opção:logging_in_server=TrueModo de operação do módulo: WEBDRIVERImportação da bibliotecaRealize a importação para dentro do código-fonte do seu projetofromalmaviva.webdriverimportWebDriverChromefromselenium.webdriver.common.byimportByExecutando o Google Chrome no modo automatizadoAviso Importante! Para usar esta biblioteca, é necessário a instalação doNavegador ChromeeChrome DriverInicialização do WebDriver com perfil para permitir restaurar ultima sessãodriver=WebDriverChrome(profile_location=r'profiles\profile1'# profile_location: Parâmetro opcional,executable_path=r'drivers\chromedriver.exe')Opções adicionais de configuração das preferências do navegador:download_dir=r'download_folder\'# Importante encerrar com 2 barras no finalpreferences={"profile.default_content_settings.popups":0,"download.default_directory":str(download_dir),"download.prompt_for_download":False,"directory_upgrade":True}driver.add_experimental_option(prefs=preferences)# Adicionar preferencias personalizadas.Opções adicionais avançadas que podem ser configurados no navegador:driver.set_options(new_argument='--disable-dev-shm-usage')# Opção para desabilitar recursos de desenvolvedor - economiza custo da memóriadriver.set_options(new_argument='--disable-gpu')# Opção para economizar processamento de vídeodriver.set_options(new_argument='--no-sandbox')# Opção para teste de versões Beta da aplicaçãodriver.set_options(new_argument='--start-maximized')# Opção para maximizar a janela no start do browserdriver.set_options(new_argument='--window-size=960,1080')# Opção para modificar largura x altura em pixel no start do browserdriver.set_options(new_argument='--headless')# Opção para não rendenizar a janela do Google ChromeAgora basta inicializar o navegador e obter os objeto de localização e controle dos elementos da página passando a função instanciadadriver.set_browser(url)previamente configurado:browser=driver.set_browser(url=r'https://portaldocolaborador.almavivadobrasil.com.br')Use comandos, como no exemplo abaixo para localizar os elementos e controlar a página web, para mais informaçoes busque as palavrasselenium browser find_elementsna web.| BY_CHOISES-- | ------------------------
1  |By.ID2  |By.XPATH3  |By.LINK_TEXT4  |By.PARTIAL_LINK_TEXT5  |By.NAME6  |By.TAG_NAME7  |By.CLASS_NAME8  |By.CSS_SELECTORbrowser.find_element(by=By.XPATH,value='__x_path__')