RateSetter é uma startup que oferece contas de poupança com base em empréstimos peer-to-peer. Mas eles enfrentaram dificuldades financeiras e agora você não pode sacar seu dinheiro; há um sistema de filas.
Compreensivelmente, os investidores comuns não estão satisfeitos.
Você deseja sacar o máximo possível de dinheiro de sua conta RateSetter, mas devido ao sistema de filas, não é possível sacar seu dinheiro. Você solicitou a “liberação de fundos”, mas há milhares de pessoas à sua frente. Você realmente precisa sacar parte do seu dinheiro o mais rápido possível. Ou você está nervoso com a possibilidade de a empresa falir, então prefere apenas receber seu dinheiro de volta!
“O tempo que os investidores demoram a aceder aos seus fundos está a demorar mais do que o habitual” … pode demorar meses! ?
O objetivo é verificar periodicamente sua conta RateSetter e sacar frequentemente pequenas quantias de dinheiro.
Depois de executar o script por cerca de duas semanas, o bot fez 40 saques. A maioria dos saques ficou próxima do mínimo (cerca de £ 2), mas tivemos um saque de aproximadamente £ 7.900. Outros dois custavam mais de £ 100.
Devido à forma como o RateSetter funciona, o dinheiro é frequentemente movimentado entre contas.
O valor do seu dinheiro "Emprestado" muda periodicamente.
Visão/brecha importante : Se algumas libras estiverem temporariamente em "Conta de retenção" ou "No mercado", podemos sacar esse dinheiro imediatamente. Normalmente, esta é uma quantia pequena, como apenas alguns quilos – mas parece variar.
Não vale a pena entrar no RateSetter com frequência para verificar se há £ 2 aqui ou £ 5 ali para serem sacados. E se não fizermos login, o dinheiro será rapidamente emprestado novamente.
Este é o objetivo do bot: identificar imediatamente quando há algumas libras não "emprestadas" e retirá-las antes que sejam vinculadas a outro mutuário.
Se algum dinheiro estiver temporariamente em "On Holding" ou "On Market": o bot clicará automaticamente no botão "Retirar" para você e, em seguida, inserirá o valor máximo possível na próxima tela. (Na verdade, ele inserirá um valor alguns centavos menor que o valor máximo – consulte a seção “Identificando os saques” abaixo.) Por fim, o bot enviará a você um e-mail para confirmar cada vez que um saque for feito.
O bot deve continuar em execução no seu computador, demorando cerca de um minuto para passar por um ciclo de cliques. Ao final do ciclo, ele retorna à página ‘Visão Geral’, para verificar se há alguma alteração. Ele verifica e pode sacar todas as contas (por exemplo, sua conta "Todos os dias" e sua conta "ISA").
Para evitar ficar sobrecarregado/confuso com um grande número de pequenos saques (~ £ 2) que obstruem seu extrato bancário, o bot definirá o número de centavos para corresponder ao número do saque.
Por exemplo, se £25,40 estiverem disponíveis para saque e o bot estiver tentando fazer o saque número 12, então apenas £25,12 serão sacados – e não os £25,40 completos que estão disponíveis.
Na próxima vez, o bot retirará £ xx,13.
Isso deve facilitar a identificação dos valores de saque que chegam à sua conta bancária.
Na minha experiência com este bot, a maioria dos primeiros 25 saques foi de cerca de £ 2. Um custava cerca de £ 200. Então, um custava ~ £ 7.900. Boom, a eficácia do bot foi validada – foi retirada imediatamente.
Se preferir observar apenas os momentos em que há uma quantia razoável de dinheiro para sacar, você deve ajustar o valor MIN_PAYOUT
em config.py
.
Se MIN_PAYOUT = 1.00
, então você poderá ter saques tão baixos quanto £ 1,01, £ 1,02, £ 1,03, etc.
Como o número de centavos corresponde ao número do saque, se MIN_PAYOUT = 2.00
e estivermos no pagamento número 12, mas apenas £ 2,05 estiverem disponíveis para saque, nenhum saque será feito. (Seria necessário haver pelo menos £ 2,12 disponíveis para retirada.)
Eu recomendo deixar o MIN_PAYOUT
baixo (por exemplo, 1,00) para começar (para que você veja o bot o mais ativo possível). Então, se os pequenos valores de retirada forem irritantes, você poderá aumentar esse limite (por exemplo, para 20). Não, se você fizer alguma alteração em config.py, será necessário parar o bot e reiniciá-lo para que as alterações tenham efeito.
Ative o menu "Desenvolver".
(Se você não vir o menu Desenvolvimento na barra de menus, escolha Safari > Preferências, clique em Avançado e selecione “Mostrar menu Desenvolvimento na barra de menus”.)
No menu "Desenvolver", clique em "Permitir automação remota".
Este script (Selenium) funciona com Chrome, Firefox, Safari (ou outros). A vantagem do Safari é que o driver web vem pré-instalado no Mac. Mas pré-instalar o driver Selenium para outros navegadores também é muito fácil.
Se você estiver usando algo diferente do Safari: siga a documentação do Selenium para baixar o driver para o seu navegador preferido.
https://selenium-python.readthedocs.io/installation.html#drivers
# Example using Chrome
from selenium import webdriver
from selenium . webdriver . chrome . options import Options
chrome_options = Options ()
# chrome_options.add_argument('--headless')
# --headles makes actions invisible
# without --headless, I can follow the script's progress
chrome_options . add_argument ( '--no-sandbox' )
# chrome_options.add_argument('--disable-dev-shm-usage')
browser = webdriver . Chrome ( '/usr/local/bin/chromedriver' , options = chrome_options )
# put path to executable chromedriver as first argument (wherever you downloaded it)
Pessoalmente, prefiro usar o Chrome porque é menos complicado (por exemplo, diminuir o zoom ou redimensionar a janela).
Execute o seguinte em seu terminal:
Crie um ambiente virtual com python 3
virtualenv rsbot -p python3
cd rsbot
. bin/activate
Baixe o código para o seu computador
git clone https://github.com/markitics/ratesetter-withdraw-bot
Instalar dependências
cd ratesetter-withdraw-bot
pip install -r requirements.txt
(Estou digitando isso de memória - pode ser necessário subir/descer uma pasta para que o arquivo requirements.txt seja instalado corretamente no ambiente virtual.)
Você deve personalizar:
SEND_EMAILS
como False
para não se preocupar com e-mails. À medida que o script é executado, há uma saída impressa de cada tentativa, então você realmente não precisa de e-mails, se preferir.Opcionalmente, você pode personalizar:
Você deve criar um novo arquivo chamado config.py
Crie um novo arquivo config.py, ao lado de config.example.py. Ou seja, o novo arquivo deve estar no mesmo diretório que config.example.py
Coloque seu próprio e-mail e senha aqui. Deixe config.example.py intacto, para referência.
Não se deixe intimidar!
Se você não precisa de alertas por e-mail, o config.py
pode ser bastante simples:
# RateSetter login details
LOGIN_URL = 'https://members.ratesetter.com/login.aspx'
RS_PASSWORD = 'ratesetterpass123'
RS_EMAIL , NEXT_PAYOUT_NUMBER = '[email protected]' , 1
# RateSetter thresholds
OVERVIEW_URL = 'https://members.ratesetter.com/overview.aspx#'
MIN_PAYOUT = 1.00 # If set to 4.00, min payout is 4.00 + payout_number in pennies
# Reminder: if there's 1.25 available, MIN_PAYOUT 1.00, but we're on payout number 30: no money will be withdrawn.
NUMBER_OF_ACCOUNTS = 2 # e.g., ISA and Everyday
WAIT_SECONDS = 30 # between page loads / clicks
# remember with wait_approx, this is +/- 20%
# Email settings
SEND_EMAILS = False
Se você quiser alertas por e-mail , seu arquivo config.py
finalizado será parecido com isto:
# config.py
# RateSetter login details
LOGIN_URL = 'https://members.ratesetter.com/login.aspx'
RS_PASSWORD = 'ratesetterpass123'
RS_EMAIL , NEXT_PAYOUT_NUMBER = '[email protected]' , 1 # adjust payout number if you re-start the bot
# RateSetter thresholds
# WITHDRAW_URL = 'https://members.ratesetter.com/your_lending/payments/one_off_withdraw.aspx'
OVERVIEW_URL = 'https://members.ratesetter.com/overview.aspx#'
MIN_PAYOUT = 1.00 # If set to 4.00, min payout is 4.00 + payout_number in pennies
# Reminder: if there's 1.25 available, MIN_PAYOUT 1.00, but we're on payout number 30: no money will be withdrawn.
NUMBER_OF_ACCOUNTS = 2 # e.g. one Everyday and one ISA account = 2 accounts
WAIT_SECONDS = 30 # between page loads / clicks
# remember with wait_approx, this is +/- 20%
SEND_EMAILS = True # set to False (capital F) if you'd like to skip everything below this line
EMAIL_EVERY_N_ATTEMPTS = 200 # Send email regardless of success/fail, so we know bot is still running
# WEBMASTER_EMAIL will receive these alerts
# Email settings
# Email login: for the email that will send you alerts (e.g., gmail)
EMAIL_HOST = "smtp.gmail.com"
EMAIL_USER = '[email protected]' # might be the same as RS_EMAIL, but might be different
EMAIL_PASSWORD = "gmailpass456"
EMAIL_USE_SSL = False # if using port 465
EMAIL_PORT = 587 # trying to use TLS
EMAIL_USE_TLS = True # if using port 587
# Note, in order to use your own gmail, you must first allow "insecure apps":
# https://myaccount.google.com/lesssecureapps
# Otherwise the bot's login attempt will fail.
# If you have two-factor authentication set up for Google, this won't work.
# Once you start the bot, check your spam folder. (In gmail, for 'in:spam'.)
# Gmail can see that emails are being sent by a bot, and they look repetitive...
# ...so there's a decent chance your emails will wind up in spam.
# Email alert details - option 1: You're running this script on behalf of a friend
SENDER = "RateSetterBot <%s>" % EMAIL_USER
ACCOUNT_OWNER_EMAIL = RS_EMAIL . replace ( '@' , '+rsalert@' )
# Who should receive the alert emails?
# WEBMASTER_EMAIL will receive the alerts, "Bot ran into a problem" and periodically, "Bot is still running"
# ACCOUNT_OWNER_EMAIL will receive emails, "Successful withdrawal has been made"
# Email alert details - option 1: You're running this script for yourself
WEBMASTER_EMAIL = ACCOUNT_OWNER_EMAIL # notified when script hits an error, and occasional
ALL_EMAIL_RECIPIENTS = ACCOUNT_OWNER_EMAIL
# Email alert details - option 2: You're running this script on behalf of a friend
WEBMASTER_EMAIL = "Mark <[email protected]>"
ALL_EMAIL_RECIPIENTS = ', ' . join ([ WEBMASTER_EMAIL , ACCOUNT_OWNER_EMAIL ])
Quem deve receber os e-mails de alerta?
WEBMASTER_EMAIL
receberá os alertas, "O bot encontrou um problema" e periodicamente, "O bot ainda está em execução" ACCOUNT_OWNER_EMAIL
receberá e-mails, "A retirada foi feita com sucesso"
Exclua (ou comente) a opção 1 ou opção 2 de config.py
# Email alert details - option 1: You're running this script for yourself
WEBMASTER_EMAIL = ACCOUNT_OWNER_EMAIL # notified when script hits an error, and occasional
ALL_EMAIL_RECIPIENTS = ACCOUNT_OWNER_EMAIL
# Email alert details - option 2: You're running this script on behalf of a friend
WEBMASTER_EMAIL = "Mark <[email protected]>"
ALL_EMAIL_RECIPIENTS = ', '.join([WEBMASTER_EMAIL, ACCOUNT_OWNER_EMAIL])
Cada dia que desejar iniciar o código, você deve primeiro fazer . bin/activate
para ativar o ambiente virtual python, antes de iniciar o shell python.
Se você estiver na pasta rs-withdraw-bot
, o comando é:
. ../bin/activate # .. goes up to parent folder
Abra o shell python
python
No shell python,
>>> from withdraw import keep_trying
Não copie e cole >>>
- isso é apenas uma pista visual de que você está no "shell python".
Agora uma janela do Safari (ou Chrome) deve ser iniciada. Se parecer que o Safari está pronto para ser controlado, vá em frente e execute o comando master para iniciar o bot:
>>> keep_trying() # will send confirmation email once it starts up
OU
>>> keep_trying(initial_email=False) # default is True
Se initial_email=True
, você será enviado por e-mail após 1 tentativa, para que você possa verificar se o e-mail está sendo enviado corretamente.
Por padrão, para confirmar que não travou, o bot enviará um e-mail novamente a cada 200 tentativas (a cada EMAIL_EVERY_N_ATTEMPTS
tentativas) – apenas para que você saiba que está ativo e funcionando. Você pode alterar essa configuração em config.py
.
Talvez você desligue o computador ou precise reiniciar o bot.
Nesse caso, ajuste NEXT_PAYOUT_NUMBER
em config.py
para corresponder ao próximo número de pagamento.
Os pagamentos são numerados 1, 2, 3, etc.
Os valores dos pagamentos têm o número correspondente de centavos, para facilitar a identificação dos saques no seu extrato bancário.
Por exemplo, os primeiros levantamentos podem ser: £29,01, £2,02, £14,03, £210,04, etc.
Se você reiniciar o bot após o saque número 4 ter sido feito, você deve definir NEXT_PAYOUT_NUMBER = 5
em config.py
. Então, o próximo valor de saque será de £ XX,05.
Você deve configurar um filtro para que os e-mails de alerta não sejam enviados para spam.
https://www.jotform.com/help/404-how-to-prevent-emails-from-landing-in-gmail-s-spam-folder
É fácil ter duas janelas separadas do Chrome controladas por dois bots separados.
Comece o primeiro e abra uma nova janela de terminal.
Ajuste os detalhes de login em config.py
para refletir a segunda conta:
RS_PASSWORD='ratesetterpass321'
RS_EMAIL, NEXT_PAYOUT_NUMBER = '[email protected]', 1
# Adjust payout number (from 1 to a higher number) if you re-start the bot, to match next withdrawal number
Salve suas alterações na configuração antes de executar o comando python
.
[email protected]
Twitter @MbyM
Este foi um projeto divertido ad hoc, minha primeira vez brincando com Selenium. Não tenho planos de manter isso ou oferecer apoio a estranhos.
Não deve ser usado para uso comercial.
Não reduza os períodos de “espera”; não abuse do site RateSetter. Na verdade, a execução do script pode ser proibida pelos termos de serviço do RateSetter – verifique você mesmo.
Qualquer amigo que tenha um conhecimento superficial de python poderá ajudá-lo a executar esse script em seu computador. É provável que eles até melhorem isso – isso já é muito simples!
CC-BY-NC – não para uso comercial.