O Gokano é uma plataforma grátis para acúmulo de pontos e troca por produtos que concentra hoje cerca de 300 mil usuários. Para participar, o usuário deve se cadastrar e realizar atividades propostas pela plataforma para acumular pontos que podem ser trocados por prêmios que são disponibilizados de tempos em tempos e estão sujeitos à duração do estoque. Dentre essas atividades, estão por exemplo seguir redes sociais, responder a enquetes e outras tarefas que se beneficiam da grande massa de usuários disposta a realizá-las.
Explicativo de utilização da plataforma
Além dessas tarefas que estão disponíveis esporadicamente, existe também um prêmio diário de 1 ponto para o usuário que acessa e faz a coleta (estratégia de gamification para manter os usuários engajados). Por ser um processo mecânico de acessar e clicar no botão, essa tarefa pode ser facilmente automatizada utilizando alguma biblioteca de navegação web. Para este exemplo, utilizarei a biblioteca Mechanize, em Python. A biblioteca pode ser facilmente obtida através do gerenciador de pacotes PIP:
1 |
sudo pip install mechanize |
Para este exemplo, utilizo o Mechanize simulando um navegador Mozilla Firefox (não que seja relevante, mas caso o servidor do Gokano mantenha registro, será um navegador válido). Para executar este script, as únicas variáveis a serem configuradas são as de endereço de email e senha da conta a realizarem a ação.
O CÓDIGO-FONTE
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 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import mechanize import cookielib import re from time import sleep #Criando o Browser e definindo o acesso br = mechanize.Browser() url = 'http://www.gokano.com' email = '' password = '' #Tempo de atraso para tentar novamente em caso de falha delay_time = 60 while True: try: #Preparando os cookies cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) #Opções do browser br.set_handle_equiv(True) br.set_handle_gzip(False) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) #Simulando um navegador como firefox br.addheaders = [('User-agent', 'Mozilla/5.0 (X11;\ U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615\ Fedora/3.0.1-1.fc9 Firefox/3.0.1')] br.open(url) # Para abrir o primeiro formulário, você pode selecionar com: #0 br.select_form(nr=0) # Preencher o formulário com os dados de login e submetendo br.form['email'] = email br.form['password'] = password br.submit() #Lendo a página e procurando pelo link com texto "Collect daily" html = br.response().read() link = br.find_link(text_regex=re.compile("Collect daily"),nr=0) br.follow_link(link) print "Coletado com sucesso!" #tempo de sleep para próxima tentativa(em segundos): 24h*60m*60s sleep(24*60*60) except Exception, e: print "Não foi possível coletar. Tentando novamente em", delay_time/60 ,"minuto(s)." sleep(delay_time) |
Observe que o código executa em loop tentando fazer a coleta do ponto e dormindo para fazer novas tentativas. Em caso de sucesso, o tempo de espera é 1 dia, enquanto em caso de erro inesperado (falha de conexão, por exemplo), ele tenta novamente após 1 minuto. Uma opção viável seria daemonizar (execução contínua em background) o script, de forma que não seria necessário deixar o console aberto executando. Demonstrarei em um post futuro como daemonizar um script em python. Quaisquer dúvidas ou sugestões, utilize os comentários ou entre em contato!
3 Comentários
Ricardo Strapasson
30 de Maio de 2018 at 15:07Boa tarde.
Esse site está fora do ar, mas é possível usar para simular navegação?
Ronan Lopes
30 de Maio de 2018 at 15:14Boa tarde, Ricardo! Acabei de verificar aqui e realmente o Gokano está apresentando erro de servidor no ato de login. Nesse caso o bot, que simula um navegador, recebe a mesma resposta de erro 500. É preciso esperar que o serviço normalize novamente. Obrigado!
Sannytet
11 de dezembro de 2018 at 16:38Nice posts! 🙂
___
Sanny