RPA com Python – PyAutoGui e webbrowser

Um post mais a fim de documentar como eu fiz meu primeiro robô com python.

Eu tinha uma idéia de como melhorar os processos repetitivos que faço todos os dias como:

  • Lançamento de horas trabalhadas
  • Consulta de horas trabalhadas da minha equipe.
  • Elaboração de relatorio de horas etc ..

    E pra isso utilizei python e algumas horas do meu tempo.

De início assisti ao video abaixo:

Depois para configurar o ambiente com o Mini conda:

As referências para os scripts foram das URLs:

https://pyautogui.readthedocs.io/en/latest/

https://automatetheboringstuff.com/chapter18/

https://docs.python.org/3/library/webbrowser.html

https://docs.conda.io/en/latest/miniconda.html

DEV: subdominios Dinâmicos no apache

Depois de muito tempo, querendo e não tentando, hoje eu procurei como deixar meu ambiente de desenvolvimento mais simples, sem a necessidade de a cada projeto criar uma entrada no hosts, mais uma vhost no apache  5 minutos economizados.

Voce vai precisar de:

dnsmasq
mod_vhost_alias (a2enmod vhost_alias), se você não tem providencie.

Pelo que li e testei, criar subdominio *.local não é uma boa ideia, porque tem outro serviço que faz alguma coisa com ele e deixa lento, então vamos de *.dev

No indião:

Voce vai criar um vhost generico “local.conf” tanto faz o que tem antes do .conf
Nele faça a seguinte parada:
vi /etc/apache2/sites-enabled/local.conf

<VirtualHost local.com:80>
UseCanonicalName Off
ServerAlias *.dev
VirtualDocumentRoot /home/user/projetos/%1/
<Directory /home/user/projetos/*/>
require all granted
ou
Allow from all
AllowOverride All
Options Indexes FollowSymlinks
</Directory>

</VirtualHost>

salve  o bagulho, reinicie o apache e vamos pra próxima.

Agora o DNSMASQ
eu copiei uma parada de um outro cara, muito bom o script :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo nano /etc/NetworkManager/NetworkManager.conf
- search for "dns=dnsmasq"
- replace with "#dns=dnsmasq"
$ sudo apt-get install dnsmasq
$ sudo nano /etc/dnsmasq.conf
- append line: "listen-address=127.0.0.1"
- append line: "bind-interfaces"
- append line: "address=/dev/127.0.0.1"
$ sudo netstat -plant | grep :53
- look for "NUMBER/dnsmasq"
$ sudo kill -9 NUMBER
- fill in the number you found for "NUMBER"
$ sudo service dnsmasq restart
$ sudo nano /etc/dhcp/dhclient.conf
- append line: "prepend domain-name-servers 127.0.0.1;"
$ sudo service network-manager restart

Agora você cria uma pasta em ~/projetos/(projeto) e depois acessa no browser:
(projeto).dev e ta funcionando, coisa linda.

Alternativa à Digital Ocean

Eu tive alguns problemas com a Digital Ocean e procurei várias alternativas, até encontrar o VULTR

No VULTR, o processo é muito semelhante ao da Digital Ocean tem inclusive um plano de $5.
Nesse caso no VULTR você tem 250mb de RAM a mais que a Digital Ocean.O armazenamento também é SSD e também possui diversos DC em 4 Continentes.

Pontos fortes do Vultr: (plano de $16)

  • Memória de 2GB
  • 2 CPus
  • 45GB SSD de armazenamento
  • 3TB de tranferencia

Conta com o Básico também, Snapshots backups da máquina, gosto muito da apresentação da fatura.

Sistemas operacionais Disponíveis: (você pode subir sua própria iso também)

  • Ubuntu: 12.04, 14.04,15.0
  • Debian: Wheezy e Jessie
  • Centos 5, 6 e 7
  • FreeBSD 10.02
  • CoreOs
  • Windows 2012 R2

Existem também estâncias dedicadas e de Armazenamento, com um preço que eu nem acreditei. vou fazer uma máquina de backup em breve.

Faça um teste no VULTR

 

Verificar se ja existe registro no INSERT

Precisei esses dias de uma query que fizesse a consulta do registro no momento do Insert.
Geralmente eu utilizaria replace com um indice unico para o campo que não pode repetir.

Você pode utilizar o índice de qualquer forma, mas levantaria exceção, então eu prefiro fazer a consulta antes e só retornar a exceção caso de erro no Insert.

O princípio é simples, concatenar uma consulta com o insert.

insert into TABELA (nome)
select * from (SELECT ‘taliba’) as TEMP
where not exists (
select nome from TABELA where nome = ‘taliba’
) limit 1

No caso acima na “tabela” tem um campo “nome”, quero verificar antes de inserir se ja existe o nome ‘taliba’, caso contrario ele insere o registro.

Simples não?

Criando um tunnel no seu servidor dedicado

Caso você tenha um servidor dedicado e queira precise utilizar o IP dele em sua maquina, como um IP Fixo sem a necessidade de contratar um, você pode fazer o Seguinte:

Crie uma conexão com o seu servidor:
$ ssh -Nf usuário@host -D 8080

No seu navegador coloque o proxy:
socks 127.0.0.1 porta 8080

Para alterar o proxy no Chromium você vai precisar inicia-lo assim:
chromium-browser –proxy-server=”socks5://127.0.0.1:8080″

Criando um servidor de desenvolvimento no virtualbox

Como trabalho com meu laptop, sempre estou em uma rede diferente, o ip muda varias vezes ao dia, e manter um servidor LAMP em uma VM fica dificil.

Decidi incluir 2 placas de rede na minha vm que roda Ubuntu Server

A primeira placa NAT
A segunda Host-only

Preste atenção para incluir a host-only em preferências no virtualbox.
File-> preferences -> network

Estando setada sua maquina voce vai ter em sua maquina um ip:
192.168.56.1

e na VM:
192.168.56.101

Mas na vm ainda não aparece a segunda placa, faça assim(NA VM):

ifconfig eth1 192.168.56.101 netmask 255.255.255.0 up

ainda na VM edite o arquiv /etc/network/interfaces

Inclua esse bloco:
# The host-only network interface
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.255

Pronto.
Texto Original:
Christopher Maier

Desenvolvendo uma loja virtual – Parte 1

Como meu negócio é banco crei esse artigo para explicar todas as funções que podemos usar em banco de dados Mysql para uma loja virtual.

Primeiro vamos levantar o que precisamos para uma loja virtual:

  1. Sistema de cadastro e alteração de produtos ( como um CMS )
    – Gerenciamento de usuários do sistema
    – Departamentos / Sub-departamentos
    – Marcas
    – Produtos
    – Gerenciamento de usuarios da loja
    – Acompanhamento de pedidos
    – Relatórios
  2. O Front-End da loja.
    – Cadastro de usuarios
    – Listagem de produtos
    – Cesta de produtos
    – Pedido / Venda

Para uma loja simples acho que isso basta. Agora vamos à criação do banco. Pra isso vamos usar o Mysql WorkBench

Crie um layer, vamos chamalo- de “ADMIN” , vamos colocar aqui as tabelas exclusivas do gestor.

Agora Insira uma nova tabela no layer, vamos chama-la de “tb_usuario”, collation latin1, innodb.
Insira os campos: usr_id, usr_nome,usr_email e usr_status conforme a imagem abaixo.

Vamos criar também uma tabela para o armazenamento das senhas. tb_senha, latin1, innodb, com os campos
snh_id e snh_senha, clique na ferramenta de relacionamento 1:n  e clique na tabela de senha e depois na tabela de usuarios. sua modelagem deve ficar como a minha:

tabela de usuarios e senhas
tabela de usuarios e senhas

 Proximo passo? Criar o índice único da tabela de senhas e o insert padrao. Em breve na Parte 2 desse artigo.

[]`s

base64 encode e base64 decode no mysql

No mysql 5.1 (que uso atualmente), não existe um função nativa para base64, pelo que pesquisei, nem para a versão 5.4. o que fazer? GOOGLE.

Nos resultados da busca encontrei muita gente procurando uma solução, um modulo em “c” e um script que cria as funções. Não é o ideal, mas o código esta bem estruturado e serve de exemplo aqui no blog.

Os temas abordados nesse script são:

– Criando Funções o Mysql
– Criando uma função para encode/decode em base64, lembrando que a lógica da função voce pode utlizar em outras linguagens que não sejam sql PHP, Asp , Java, JavaSncript …

Você encontra o script em: http://wi-fizzle.com/downloads/base64.sql
Por Ian Gulliver.

Acesso restrito por nível de usuário.

Esse por foi pedido pelo Kilderson Sena da Artigos & Tutoriais de onde faço parte mas ainda não postei nada 😛 .

Bom, ja fiz alguns sistemas em PHP com MySql e é claro precisavam de algum tipo de segurança, alguns com níveis de acesso que eu chamo de Perfil. Para começar devemos primeiro pensar na Aplicação, utilizarei como teste uma aplicação com nível de acesso por Telas.

Primeiro teremos uma tabela com as Telas do sistema “tb_tela”:

tla_id INT not null auto_increment primary key
tla_nome VARCHAR(45) not null

Só isso, um código para a tela, e um nome para a mesma, você deverá utilizar esse nome e código para a geração do menu.

Agora a tabela de Usuários “tb_usuario”:

usr_id INT not nullauto_increment  primary key            “Código do usuário”
usr_login varchar(20) not null              “Nome de usuário, utilizado para logar”
usr_senha varchar(100) not null            “Senha, de preferência utilize MD5”
prf_id INT not null                                       “Código do perfil logo a baixo tem a tabela”

Pra deixar melhor, você pode criar um índice único no campo usr_login para que não ocorra de cadastrar usuários com logins idênticos, imagina dois “admin” ?

A tabela de Perfil onde são cadastrados os Níveis de acesso “tb_perfil”:

prf_id INT not null auto_increment primary key
prf_nome varchar(45) not null

Agora o relacionamento entre Tela e Perfil gerando um acesso válido “tb_permissao”:

prm_id INT not null auto_increment primary key
tla_id INT                                     “código da tela”
prf_id INT                                    “código do perfil.”

 

Ok, não entendeu patavinas? eu explico.

Cada usuário tem um perfil (tb_perfil), cada tela do seu sistema esta cadastrada na tb_tela.
Ao criar um relacionamento entre perfil e tela  automaticamente eu crio uma permissão para esse perfil a essa tela.
Agora você pode usar sua linguagem de preferência e aplicar a logica ao modelo.

Abraços
Kleber Taliba Martins