RateSetter는 P2P 대출을 기반으로 저축 계정을 제공하는 스타트업입니다. 그러나 그들은 재정적 어려움에 직면했고 이제 돈을 인출할 수 없습니다. 큐잉 시스템이 있어요.
당연히 일반 투자자들은 행복하지 않습니다.
RateSetter 계정에서 최대한 많은 금액을 인출하고 싶지만 대기열 시스템으로 인해 돈을 인출할 수 없습니다. 당신은 "자금 공개"를 요청했지만 당신 앞에는 수천 명의 사람들이 있습니다. 최대한 빨리 돈의 일부를 인출해야 합니다. 아니면 회사가 망할까봐 불안해서 그냥 돈을 돌려받는 편이 나을 수도 있습니다!
"투자자들이 자금에 접근하는 데 걸리는 시간이 평소보다 길어지고 있습니다." ...몇 달이 걸릴 수 있습니다! ?
목표는 주기적으로 RateSetter 계정을 확인하고, 소액의 자금을 자주 인출하는 것입니다.
약 2주 동안 스크립트를 실행한 후 봇은 40건의 출금을 수행했습니다. 대부분의 인출은 최소 금액(약 £2)에 가까웠지만 한 번의 인출은 ~£7,900였습니다. 다른 두 명은 £100가 넘었습니다.
RateSetter의 작동 방식으로 인해 돈이 계좌 간에 자주 이동합니다.
"대출 중" 금액은 주기적으로 변경됩니다.
주요 통찰력/허점 : 몇 파운드가 일시적으로 "보유 계좌" 또는 "시장"에 있는 경우 해당 자금을 즉시 인출할 수 있습니다. 일반적으로 이는 몇 파운드 정도의 적은 양이지만 상황에 따라 다릅니다.
여기에 £2가 있는지, 저기에 £5가 있는지 확인하기 위해 RateSetter에 자주 로그인할 가치가 거의 없습니다. 그리고 로그인을 하지 않으면 그 돈은 금방 다시 대출이 됩니다.
이것이 봇의 요점입니다. "대출 중"이 아닌 몇 파운드가 있으면 즉시 발견하고 다른 차용인에게 묶이기 전에 이를 인출하는 것입니다.
자금이 일시적으로 "보유 중" 또는 "시장 중"인 경우: 봇이 자동으로 "인출" 버튼을 클릭한 후 다음 화면에서 가능한 최대 금액을 입력합니다. (실제로는 최대 금액보다 몇 센트 적은 금액을 입력합니다. 아래의 "인출 식별" 섹션을 참조하십시오.) 마지막으로 인출이 이루어질 때마다 봇이 확인 이메일을 보냅니다.
봇은 한 번의 클릭 주기를 거치는 데 1분 정도 걸리며 컴퓨터에서 계속 실행되어야 합니다. 주기가 끝나면 '개요' 페이지로 돌아가 변경 사항을 확인합니다. 모든 계좌(예: "Everyday" 계좌 및 "ISA" 계좌)를 확인하고 출금할 수 있습니다.
귀하의 은행 명세서를 막히게 하는 수많은 소액(~£2) 인출로 인한 압도/혼란을 피하기 위해 봇은 인출 번호와 일치하도록 페니 수를 설정합니다.
예를 들어 £25.40를 인출할 수 있게 되었고 봇이 인출 번호 12를 찾으려고 하면 £25.12만 인출되며 사용 가능한 £25.40 전체가 인출되지 않습니다.
다음 번에는 봇이 £xx.13을 인출합니다.
이렇게 하면 귀하의 은행 계좌에 발생한 인출 금액을 더 쉽게 식별할 수 있습니다.
이 봇을 사용한 경험에 따르면 처음 25번의 인출은 대부분 £2 정도였습니다. 하나는 £ 200 정도였습니다. 그렇다면 하나는 ~ £ 7,900였습니다. 붐, 봇의 효율성이 검증되었습니다. 이는 즉시 철회되었습니다.
인출할 금액이 꽤 있는 순간만 확인하고 싶다면 config.py
에서 MIN_PAYOUT
값을 조정해야 합니다.
MIN_PAYOUT = 1.00
이면 최저 £1.01, £1.02, £1.03 등으로 인출할 수 있습니다.
동전 수가 인출 번호와 일치하기 때문에 MIN_PAYOUT = 2.00
이고 지불금 번호가 12이지만 인출할 수 있는 금액이 £2.05인 경우 인출이 이루어지지 않습니다. (인출하려면 최소 £2.12가 있어야 합니다.)
시작하려면 MIN_PAYOUT
을 낮게(예: 1.00) 두는 것이 좋습니다. 그러면 봇이 최대한 활성화되는 것을 볼 수 있습니다. 그런 다음 소액 인출 금액이 귀찮다면 이 임계값을 늘릴 수 있습니다(예: 20으로). 아니요, config.py를 변경한 경우 변경 사항을 적용하려면 봇을 중지하고 봇을 다시 시작해야 합니다.
"개발" 메뉴를 활성화합니다.
(메뉴 막대에 개발 메뉴가 표시되지 않으면 Safari > 환경 설정을 선택하고 고급을 클릭한 다음 '메뉴 막대에 개발 메뉴 표시'를 선택하세요.)
"개발" 메뉴에서 "원격 자동화 허용"을 클릭하세요.
이 스크립트(Selenium)는 Chrome, Firefox, Safari(또는 기타)에서 작동합니다. Safari의 장점은 Mac에 웹 드라이버가 미리 설치되어 있다는 점입니다. 하지만 다른 브라우저용 Selenium 드라이버를 사전 설치하는 것도 매우 쉽습니다.
Safari가 아닌 다른 것을 사용하는 경우: Selenium 문서에 따라 선호하는 브라우저에 맞는 드라이버를 다운로드하세요.
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)
개인적으로 저는 덜 안절부절 못하는 Chrome을 사용하는 것을 선호합니다(예: 창 축소 또는 크기 조정).
터미널에서 다음을 실행하세요.
Python 3으로 가상 환경 만들기
virtualenv rsbot -p python3
cd rsbot
. bin/activate
코드를 컴퓨터에 다운로드하세요.
git clone https://github.com/markitics/ratesetter-withdraw-bot
종속성 설치
cd ratesetter-withdraw-bot
pip install -r requirements.txt
(이 내용은 메모리에서 입력하고 있습니다. 가상 환경에 요구사항.txt를 올바르게 설치하려면 폴더 위/아래로 이동해야 할 수도 있습니다.)
다음을 개인화해야 합니다.
SEND_EMAILS
False
로 설정하세요. 스크립트가 실행되면 각 시도에 대한 출력이 인쇄되므로 원하는 경우 이메일이 실제로 필요하지 않습니다.선택적으로 다음을 개인화할 수 있습니다.
config.py라는 새 파일을 만들어야 합니다.
config.example.py 옆에 새 파일 config.py를 만듭니다. 즉, 새 파일은 config.example.py와 동일한 디렉터리에 있어야 합니다.
여기에 자신의 이메일과 비밀번호를 입력하세요. 참조를 위해 config.example.py를 그대로 둡니다.
겁먹지 마세요!
이메일 알림이 필요하지 않은 경우 config.py
는 충분히 간단할 수 있습니다.
# 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
이메일 알림을 원할 경우 완성된 config.py
파일은 다음과 같습니다.
# 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 ])
알림 이메일은 누가 받아야 합니까?
WEBMASTER_EMAIL
"봇에 문제가 발생했습니다"라는 경고를 받고 주기적으로 "봇이 아직 실행 중입니다"라는 경고를 받습니다. ACCOUNT_OWNER_EMAIL
"성공적으로 인출이 이루어졌습니다"라는 이메일을 받습니다.
config.py
에서 옵션 1 또는 옵션 2를 삭제(또는 주석 처리)합니다.
# 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])
코드를 시작하려는 날마다 먼저 다음을 수행해야 합니다 . bin/activate
Python 셸을 시작하기 전에 . bin/activate
사용하여 가상 Python 환경을 활성화하세요.
rs-withdraw-bot
폴더에 있는 경우 명령은 다음과 같습니다.
. ../bin/activate # .. goes up to parent folder
파이썬 셸을 엽니다.
python
파이썬 쉘에서,
>>> from withdraw import keep_trying
>>>
복사하여 붙여넣지 마십시오. 이는 "파이썬 셸"에 있다는 시각적 단서일 뿐입니다.
이제 Safari(또는 Chrome) 창이 실행됩니다. Safari를 제어할 준비가 된 것 같으면 master 명령을 실행하여 봇을 시작하세요.
>>> keep_trying() # will send confirmation email once it starts up
또는
>>> keep_trying(initial_email=False) # default is True
initial_email=True
인 경우 1회 시도 후 이메일을 보내므로 이메일이 올바르게 전송되고 있는지 확인할 수 있습니다.
기본적으로 충돌이 발생하지 않았는지 확인하기 위해 봇은 200회 시도마다( EMAIL_EVERY_N_ATTEMPTS
회 시도마다) 이메일을 다시 보내며, 살아 있고 작업 중임을 알려줍니다. config.py
에서 이 설정을 변경할 수 있습니다.
컴퓨터를 끄거나 봇을 다시 시작해야 할 수도 있습니다.
이 경우 config.py
의 NEXT_PAYOUT_NUMBER
를 다음 지급 번호와 일치하도록 조정하세요.
지불금은 1, 2, 3 등으로 번호가 지정됩니다.
지급 금액에는 해당하는 페니 수가 표시되어 있어 은행 명세서에서 인출 내역을 더 쉽게 확인할 수 있습니다.
예를 들어 처음 몇 번의 인출은 £29.01, £2.02, £14.03, £210.04 등이 될 수 있습니다.
4번 출금이 이루어진 후 봇을 다시 시작한다면 config.py
에서 NEXT_PAYOUT_NUMBER = 5
설정해야 합니다. 그러면 다음 인출 금액은 £XX.05가 됩니다.
경고 이메일이 스팸으로 분류되지 않도록 필터를 설정해야 합니다.
https://www.jotform.com/help/404-how-to-prevent-emails-from-landing-in-gmail-s-spam-folder
두 개의 별도 봇으로 두 개의 별도 Chrome 창을 제어하는 것은 쉽습니다.
첫 번째 작업을 시작한 다음 새 터미널 창을 엽니다.
두 번째 계정을 반영하도록 config.py
에서 로그인 세부 정보를 조정합니다.
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
python
명령을 실행하기 전에 구성 변경 사항을 저장하십시오.
[email protected]
트위터 @MbyM
이것은 제가 처음으로 Selenium을 사용해 본 임시적이고 재미있는 프로젝트였습니다. 나는 이것을 유지할 계획도 없고 낯선 사람에게 지원을 제공할 계획도 없습니다.
상업적인 용도로 사용하면 안 됩니다.
'대기' 기간을 줄이지 마십시오. RateSetter 웹사이트를 남용하지 마십시오. 실제로 스크립트 실행은 RateSetter 서비스 약관에 의해 금지될 수 있습니다. 직접 확인하세요.
Python에 대한 대략적인 지식을 갖고 있는 친구라면 누구나 이 스크립트를 컴퓨터에서 실행하는 데 도움을 줄 수 있을 것입니다. 그들은 그것을 개선할 가능성도 있습니다. 이것은 현재로서는 매우 거칠고 준비가 되어 있습니다!
CC-BY-NC – 상업용이 아닙니다.