RateSetter es una startup que ofrecía cuentas de ahorro basadas en préstamos entre pares. Pero tuvieron dificultades financieras y ahora no puedes retirar tu dinero; Hay un sistema de colas.
Es comprensible que los inversores comunes y corrientes no estén contentos.
Quiere retirar la mayor cantidad de dinero posible de su cuenta RateSetter, pero debido a su sistema de cola, no puede retirar su dinero. Ha solicitado "liberar fondos", pero hay miles de personas por delante. Realmente necesitas retirar parte de tu dinero lo antes posible. O está nervioso de que la empresa quiebre, ¡así que prefiere que le devuelvan su dinero!
“El tiempo que están tardando los inversores en acceder a sus fondos está siendo más largo de lo habitual” … ¡pueden tardar meses! ?
El objetivo es comprobar periódicamente su cuenta RateSetter y retirar pequeñas cantidades de dinero con frecuencia.
Después de ejecutar el script durante aproximadamente dos semanas, el bot realizó 40 retiros. La mayoría de los retiros estuvieron cerca del mínimo (alrededor de £2), pero tuvimos un retiro de ~£7,900. Otros dos costaban más de £100.
Debido a la forma en que funciona RateSetter, el dinero se mueve con frecuencia entre cuentas.
El monto de su dinero "Préstamo" cambia periódicamente.
Información clave/laguna jurídica : si hay algunas libras temporalmente en la "Cuenta de haberes" o "En el mercado", podemos retirar ese dinero de inmediato. Por lo general, se trata de una cantidad pequeña, como unos pocos kilos, pero parece variar.
No vale la pena iniciar sesión en RateSetter muy a menudo para comprobar si hay £2 aquí o £5 allá para retirar. Y si no iniciamos sesión, el dinero se vuelve a prestar rápidamente.
Este es el objetivo del robot: detectar inmediatamente cuando hay algunas libras que no están "prestadas" y retirarlas antes de que queden vinculadas con otro prestatario.
Si hay dinero temporalmente en "Retención" o "En Mercado": el robot automáticamente hará clic en el botón "Retirar" y luego ingresará la cantidad máxima posible en la siguiente pantalla. (En realidad, ingresará una cantidad unos pocos centavos menos que la cantidad máxima; consulte la sección "Identificar los retiros" a continuación). Finalmente, el bot le enviará un correo electrónico para confirmar cada vez que se realice un retiro.
El bot debería seguir ejecutándose en su computadora y tardar aproximadamente un minuto en realizar un ciclo de clics. Al final del ciclo, regresa a la página "Descripción general" para comprobar si hay algún cambio. Verifica y puede retirar de todas las cuentas (por ejemplo, su cuenta "Everyday" y su cuenta "ISA").
Para evitar sentirse abrumado/confundido por una gran cantidad de retiros pequeños (~£2) que obstruyen su extracto bancario, el robot establecerá la cantidad de centavos para que coincida con el número de retiro.
Por ejemplo, si £25,40 están disponibles para retirar y el robot busca realizar el retiro número 12, entonces solo se retirarán £25,12, no las £25,40 completas que están disponibles.
La próxima vez, el robot retirará £xx,13.
Esto debería facilitar la identificación de los montos de retiro que llegan a su cuenta bancaria.
En mi experiencia al usar este bot, la mayoría de los primeros 25 retiros fueron de aproximadamente £2. Uno costaba alrededor de £200. Entonces uno costaba ~ £ 7,900. Boom, la efectividad del bot ha sido validada; esto fue retirado inmediatamente.
Si prefieres estar atento sólo a los momentos en los que hay una cantidad decente de dinero para retirar, debes ajustar el valor MIN_PAYOUT
en config.py
.
Si MIN_PAYOUT = 1.00
, entonces podrías realizar retiros tan bajos como £1,01, £1,02, £1,03, etc.
Debido a que la cantidad de centavos coincide con el número de retiro, si MIN_PAYOUT = 2.00
y estamos en el pago número 12, pero solo hay £2,05 disponibles para retirar, entonces no se realizará ningún retiro. (Debe haber al menos £2,12 disponibles para retirar).
Recomendaría dejar el MIN_PAYOUT
bajo (por ejemplo, 1,00) para comenzar (para que veas que el bot está lo más activo posible). Luego, si las pequeñas cantidades de retiro le resultan molestas, puede aumentar este umbral (por ejemplo, a 20). No, si realiza algún cambio en config.py, debe detener el bot y reiniciarlo para que los cambios surtan efecto.
Habilite el menú "Desarrollar".
(Si no ve el menú Desarrollar en la barra de menú, elija Safari > Preferencias, haga clic en Avanzado y luego seleccione "Mostrar menú Desarrollar en la barra de menú".)
En el menú "Desarrollar", haga clic en "Permitir automatización remota".
Este script (Selenium) funciona con Chrome, Firefox, Safari (u otros). La ventaja de Safari es que el controlador web está preinstalado en Mac. Pero preinstalar el controlador Selenium para otros navegadores también es muy sencillo.
Si está utilizando algo que no sea Safari: siga los documentos de Selenium para descargar el controlador para su 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)
Personalmente, prefiero usar Chrome porque es menos inquietante (por ejemplo, alejar o cambiar el tamaño de la ventana).
Ejecute lo siguiente en su terminal:
Crea un entorno virtual con Python 3
virtualenv rsbot -p python3
cd rsbot
. bin/activate
Descarga el código a tu computadora
git clone https://github.com/markitics/ratesetter-withdraw-bot
Instalar dependencias
cd ratesetter-withdraw-bot
pip install -r requirements.txt
(Estoy escribiendo esto desde la memoria; es posible que necesite subir o bajar una carpeta para instalar requisitos.txt en el entorno virtual correctamente).
Debes personalizar:
SEND_EMAILS
en False
para no molestarse con los correos electrónicos. A medida que se ejecuta el script, hay un resultado impreso de cada intento, por lo que realmente no necesita correos electrónicos si lo prefiere.Opcionalmente puedes personalizar:
Debes crear un nuevo archivo llamado config.py
Cree un nuevo archivo config.py, al lado de config.example.py. Es decir, el nuevo archivo debe estar en el mismo directorio que config.example.py
Pon tu propio correo electrónico y contraseña aquí. Deje config.example.py intacto, como referencia.
¡No te dejes intimidar!
Si no necesita alertas por correo electrónico, config.py
puede ser bastante simple:
# 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
Si desea recibir alertas por correo electrónico , su archivo config.py
terminado se verá así:
# 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 ])
¿Quién debería recibir los correos electrónicos de alerta?
WEBMASTER_EMAIL
recibirá las alertas, "El bot tuvo un problema" y periódicamente, "El bot aún se está ejecutando". ACCOUNT_OWNER_EMAIL
recibirá correos electrónicos, "Se realizó un retiro exitoso".
Eliminar (o comentar) la opción 1 o la opción 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 día que desees iniciar el código, primero debes hacerlo . bin/activate
para activar el entorno virtual de Python, antes de iniciar el shell de Python.
Si estás en la carpeta rs-withdraw-bot
, el comando es:
. ../bin/activate # .. goes up to parent folder
Abra el shell de Python
python
En el shell de Python,
>>> from withdraw import keep_trying
No copie y pegue >>>
; eso es solo una pista visual de que está en el "shell de Python".
Ahora debería abrirse una ventana de Safari (o Chrome). Si parece que Safari está listo para ser controlado, continúa y ejecuta el comando maestro para iniciar el bot:
>>> keep_trying() # will send confirmation email once it starts up
O
>>> keep_trying(initial_email=False) # default is True
Si initial_email=True
, le enviará un correo electrónico después de 1 intento, para que pueda comprobar que el correo electrónico se envía correctamente.
De forma predeterminada, para confirmar que no ha fallado, el bot le enviará un correo electrónico nuevamente cada 200 intentos (cada EMAIL_EVERY_N_ATTEMPTS
intentos), solo para informarle que está vivo y funcionando. Puede cambiar esta configuración en config.py
.
Quizás apagues tu computadora o necesites reiniciar el bot.
En este caso, ajuste NEXT_PAYOUT_NUMBER
en config.py
para que coincida con el siguiente número de pago.
Los pagos están numerados 1, 2, 3, etc.
Los montos de pago tienen la cantidad correspondiente de centavos, para que sea más fácil identificar los retiros en su extracto bancario.
Por ejemplo, los primeros retiros podrían ser: £29,01, £2,02, £14,03, £210,04, etc.
Si reinicia el bot después de realizar el retiro número 4, debe configurar NEXT_PAYOUT_NUMBER = 5
en config.py
. Entonces el próximo importe a retirar será de £XX,05.
Debe configurar un filtro para que los correos electrónicos de alerta no se conviertan en spam.
https://www.jotform.com/help/404-how-to-prevent-emails-from-landing-in-gmail-s-spam-folder
Es fácil tener dos ventanas de Chrome separadas controladas por dos bots separados.
Ejecute el primero y luego abra una nueva ventana de terminal.
Ajuste los detalles de inicio de sesión en config.py
para reflejar la segunda cuenta:
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
Guarde sus cambios en la configuración antes de ejecutar el comando python
.
[email protected]
Twitter @MbyM
Este fue un proyecto divertido ad hoc, la primera vez que juego con Selenium. No tengo planes de mantener esto ni ofrecer apoyo a extraños.
No debe utilizarse para uso comercial.
No reducir los períodos de "espera"; no abuse del sitio web de RateSetter. En realidad, es posible que los términos de servicio de RateSetter prohíban la ejecución del script; compruébelo usted mismo.
Cualquier amigo que tenga un conocimiento superficial de Python debería poder ayudarle a ejecutar este script en su computadora. Lo más probable es que incluso lo mejoren: ¡esto es muy sencillo tal como está!
CC-BY-NC: no para uso comercial.