RateSetter هي شركة ناشئة تقدم حسابات ادخارية تعتمد على الإقراض من نظير إلى نظير. لكنهم واجهوا صعوبات مالية والآن لا يمكنك سحب أموالك؛ هناك نظام الطابور.
ومن المفهوم أن المستثمرين العاديين ليسوا سعداء.
أنت تريد سحب أكبر قدر ممكن من الأموال من حساب RateSetter الخاص بك، ولكن نظرًا لنظام الانتظار الخاص بهم، لن تتمكن من سحب أموالك. لقد طلبت "الإفراج عن الأموال"، ولكن هناك الآلاف من الأشخاص أمامك. أنت حقا بحاجة إلى سحب بعض أموالك في أسرع وقت ممكن. أو أنك متوتر من أن الشركة سوف تنهار، لذا تفضل استعادة أموالك فقط!
"الوقت الذي يستغرقه المستثمرون للوصول إلى أموالهم يستغرق وقتًا أطول من المعتاد" ... قد يستغرق شهورًا! ؟
الهدف هو التحقق بشكل دوري من حساب RateSetter الخاص بك، وسحب مبالغ صغيرة من المال بشكل متكرر.
وبعد تشغيل البرنامج النصي لمدة أسبوعين تقريبًا، أجرى الروبوت 40 عملية سحب. كانت معظم عمليات السحب قريبة من الحد الأدنى (حوالي 2 جنيه إسترليني)، ولكن كان لدينا عملية سحب واحدة بقيمة 7900 جنيه إسترليني تقريبًا. كان اثنان آخران أكثر من 100 جنيه إسترليني.
نظرًا للطريقة التي يعمل بها RateSetter، فإن الأموال تنتقل بشكل متكرر بين الحسابات.
يتغير مبلغ أموالك "على القرض" بشكل دوري.
الفكرة الرئيسية/الثغرة : إذا كانت هناك بضعة جنيهات مؤقتًا في "حساب الحجز" أو "في السوق"، فيمكننا سحب هذه الأموال على الفور. عادةً ما تكون هذه كمية صغيرة، مثل بضعة جنيهات فقط، ولكن يبدو أنها تختلف.
لا يستحق تسجيل الدخول إلى RateSetter في كثير من الأحيان للتحقق مما إذا كان هناك 2 جنيهًا إسترلينيًا هنا، أو 5 جنيهات إسترلينية هناك، ليتم سحبها. وإذا لم نقم بتسجيل الدخول، فسيتم إقراض الأموال بسرعة مرة أخرى.
هذا هو بيت القصيد من الروبوت: اكتشف على الفور وجود بضعة جنيهات غير "على سبيل الإعارة"، واسحبها قبل أن يتم ربطها بمقترض آخر.
إذا كانت هناك أي أموال مؤقتًا في "قيد الحجز" أو "في السوق": فسيقوم الروبوت تلقائيًا بالنقر فوق الزر "سحب" لك، ثم أدخل الحد الأقصى للمبلغ الممكن في الشاشة التالية. (في الواقع، سيُدخل مبلغًا أقل ببضعة بنسات من الحد الأقصى للمبلغ - راجع قسم "تحديد عمليات السحب" أدناه.) وأخيرًا، سيرسل لك الروبوت بريدًا إلكترونيًا للتأكيد في كل مرة يتم فيها السحب.
من المفترض أن يستمر تشغيل الروبوت على جهاز الكمبيوتر الخاص بك، ويستغرق دقيقة أو نحو ذلك لإجراء دورة واحدة من النقرات. وفي نهاية الدورة، يعود إلى صفحة "نظرة عامة" للتحقق من أي تغيير. فهو يتحقق من جميع الحسابات ويمكنه السحب منها (على سبيل المثال، حساب "كل يوم" وحساب "ISA".)
لتجنب الارتباك/الارتباك بسبب عدد كبير من عمليات السحب الصغيرة (~ 2 جنيه إسترليني) التي تسد كشف حسابك البنكي، سيقوم الروبوت بتعيين عدد البنسات لتتناسب مع رقم السحب.
على سبيل المثال، إذا أصبح مبلغ 25.40 جنيهًا إسترلينيًا متاحًا للسحب، وكان الروبوت يتطلع إلى إجراء السحب رقم 12، فسيتم سحب 25.12 جنيهًا إسترلينيًا فقط - وليس مبلغ 25.40 جنيهًا إسترلينيًا المتاح بالكامل.
في المرة القادمة، سيقوم الروبوت بسحب مبلغ xx.13 جنيهًا إسترلينيًا.
وهذا من شأنه أن يسهل تحديد مبالغ السحب التي تصل إلى حسابك المصرفي.
في تجربتي باستخدام هذا الروبوت، كانت معظم عمليات السحب الـ 25 الأولى حوالي 2 جنيهًا إسترلينيًا. واحد كان حوالي 200 جنيه استرليني. ثم كان الواحد ~ 7900 جنيه إسترليني. حسنًا، لقد تم التحقق من فعالية الروبوت، وتم سحب هذا على الفور.
إذا كنت تفضل النظر فقط إلى اللحظات التي يتوفر فيها مبلغ مناسب من المال للسحب، فيجب عليك ضبط قيمة MIN_PAYOUT
في config.py
.
إذا كان 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. لكن التثبيت المسبق لبرنامج تشغيل السيلينيوم للمتصفحات الأخرى أمر سهل للغاية أيضًا.
إذا كنت تستخدم أي شيء آخر غير Safari: اتبع مستندات السيلينيوم لتنزيل برنامج التشغيل للمتصفح المفضل لديك.
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 لأنه أقل تململًا (على سبيل المثال، تصغير النافذة أو تغيير حجمها).
قم بتشغيل ما يلي في المحطة الطرفية الخاصة بك:
إنشاء بيئة افتراضية باستخدام بيثون 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
(أنا أكتب هذا من الذاكرة - قد تحتاج إلى الانتقال إلى أعلى/أسفل مجلد لتثبيت ملف require.txt في البيئة الافتراضية بشكل صحيح.)
يجب عليك تخصيص:
SEND_EMAILS
على False
حتى لا تهتم برسائل البريد الإلكتروني. أثناء تشغيل البرنامج النصي، هناك مخرجات مطبوعة لكل محاولة، لذلك لا تحتاج حقًا إلى رسائل البريد الإلكتروني إذا كنت تفضل ذلك.يمكنك اختياريًا تخصيص:
يجب عليك إنشاء ملف جديد يسمى config.py
قم بإنشاء ملف config.py جديد، بجانب config.example.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
رسائل بريد إلكتروني، "تم إجراء السحب بنجاح"
احذف (أو قم بالتعليق) الخيار 1 أو الخيار 2 من 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])
في كل يوم ترغب في بدء تشغيل الكود فيه، يجب عليك أولاً القيام بذلك . bin/activate
لتنشيط بيئة python الافتراضية، قبل إطلاق python shell.
إذا كنت في مجلد rs-withdraw-bot
، فالأمر هو:
. ../bin/activate # .. goes up to parent folder
افتح غلاف الثعبان
python
في قذيفة بايثون،
>>> from withdraw import keep_trying
لا تقم بنسخ >>>
ولصقه - فهذا مجرد دليل مرئي على أنك في "Python Shell".
يجب الآن تشغيل نافذة Safari (أو Chrome). إذا بدا أن Safari جاهز للتحكم فيه، فاستمر في تشغيل الأمر الرئيسي لبدء الروبوت:
>>> keep_trying() # will send confirmation email once it starts up
أو
>>> keep_trying(initial_email=False) # default is True
إذا كان initial_email=True
، فسيتم إرساله إليك عبر البريد الإلكتروني بعد محاولة واحدة، حتى تتمكن من التحقق من إرسال البريد الإلكتروني بشكل صحيح.
افتراضيًا، للتأكد من عدم تعطله، سيرسل إليك الروبوت بريدًا إلكترونيًا مرة أخرى كل 200 محاولة (كل EMAIL_EVERY_N_ATTEMPTS
محاولات) - فقط لإعلامك بأنه لا يزال قيد التشغيل ويعمل بعيدًا. يمكنك تغيير هذا الإعداد في config.py
.
ربما قمت بإيقاف تشغيل جهاز الكمبيوتر الخاص بك، أو تحتاج إلى إعادة تشغيل الروبوت.
في هذه الحالة، قم بضبط NEXT_PAYOUT_NUMBER
في config.py
ليطابق رقم الدفع التالي.
يتم ترقيم الدفعات 1، 2، 3، إلخ.
تحتوي مبالغ الدفع على العدد المقابل من البنسات، لتسهيل التعرف على عمليات السحب في كشف حسابك البنكي.
على سبيل المثال، قد تكون عمليات السحب القليلة الأولى: 29.01 جنيهًا إسترلينيًا، و2.02 جنيهًا إسترلينيًا، و14.03 جنيهًا إسترلينيًا، و210.04 جنيهًا إسترلينيًا، وما إلى ذلك.
إذا قمت بإعادة تشغيل الروبوت بعد إجراء السحب رقم 4، فيجب عليك تعيين NEXT_PAYOUT_NUMBER = 5
في config.py
. ثم سيكون مبلغ السحب التالي هو 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
.
م@rkموريارتي.كوم
تويترMbyM
لقد كان هذا مشروعًا ممتعًا مخصصًا، وهي المرة الأولى التي ألعب فيها بالسيلينيوم. ليس لدي أي خطط للحفاظ على هذا أو تقديم الدعم للغرباء.
لا يستخدم للاستخدام التجاري.
لا تقلل من فترات "الانتظار"؛ لا تسيء استخدام موقع RateSetter. في الواقع، قد يكون تشغيل البرنامج النصي محظورًا بموجب شروط خدمة RateSetter - تحقق من ذلك بنفسك.
يجب أن يتمكن أي صديق لديه معرفة سريعة ببايثون من مساعدتك في تشغيل هذا البرنامج النصي على جهاز الكمبيوتر الخاص بك. من المحتمل أنهم سيعملون على تحسينه - وهذا أمر تقريبي وجاهز للغاية كما هو!
CC-BY-NC – ليس للاستخدام التجاري.