如何为每个帐户创建单独的会话?

时间:2021-01-04 18:55:23

标签: python multithreading session multiprocessing bots

我有一个订单,我需要创建一个应用程序,该应用程序将在其中一个站点上执行各种操作。该程序必须一次从 30 个帐户执行操作。我编写了代码,它在 1 个帐户上运行良好。如何使多个帐户的一切正常运行?当我在 3 个线程(每个线程 1 个帐户)中运行程序时,在站点上授权 1 个帐户后,第二个帐户也进行了授权,但它离开了第一个帐户。会话被覆盖。我尝试为每个帐户分配一个会话(使用第四个参数将会话传递给流),但这对我来说不起作用。我也有html解析来获取必要的数据,html也被覆盖了。我已经彻底绝望了,唯一的希望就是你的帮助。如果有人能给我一个现成的代码块或详细描述我需要做什么,我将不胜感激。总的来说,我很乐意听取您的任何建议:)

连接是通过 Tor 网络建立的,如站点 .onion

import threading
from settings import *
import random
import time
import requests
from bs4 import BeautifulSoup
import json
from stem import Signal
from stem.control import Controller

session = requests.session()
def get_tor_session():
    session.proxies = {'http': 'socks5h://127.0.0.1:9050',
                       'https': 'socks5h://127.0.0.1:9050'}
    return session




def renew_connection():
    with Controller.from_port(port=9051) as controller:
        controller.authenticate(password=password_hash_de)
        controller.signal(Signal.NEWNYM)


def find_captcha_base64_frpage(number_img, url):
    global html, session, soup
    html = session.get(url, headers=headers).text
    soup = BeautifulSoup(html, "lxml")
    imgs_tag = soup.find_all("img")
    img_tag = imgs_tag[number_img]
    img_src = img_tag['src']
    return img_src


def find_captcha_base64_secpage(number_img):
    global html, session, soup
    soup = BeautifulSoup(html, "lxml")
    imgs_tag = soup.find_all("img")
    img_tag = imgs_tag[number_img]
    img_src = img_tag['src']
    return img_src


def find_captcha_data(num):
    global html, soup
    soup = BeautifulSoup(html, "lxml")
    inputs_tag = soup.find_all("input")
    input_tag = inputs_tag[num]
    data_captcha = input_tag['value']
    print(data_captcha)
    return data_captcha


def send_captcha_base64(base64_text):
    answer = requests.post(
        f"https://rucaptcha.com/in.php",
        json={"key": api_key_rucaptcha, "method": "base64", "body": base64_text, "json": "1"}
    )
    time.sleep(20)
    captcha_list = json.loads(answer.text)
    captcha_id = captcha_list["request"]
    re_answer = requests.get(
        "https://rucaptcha.com/res.php?key=" + api_key_rucaptcha + "&action=get&id=" + captcha_id + "&json=1"
    )
    re_captcha_list = json.loads(re_answer.text)
    re_captcha = re_captcha_list["request"]
    return re_captcha


def send_captcha_to_formfp(ses):
    global session, html
    data = {
        "captcha": send_captcha_base64(find_captcha_base64_frpage(0, origin_url)),
        "captchaData": find_captcha_data(1),
        "ret": "/"
    }
    session1 = ses.post(origin_url_gate, data=data, headers=headers)
    t = session1
    html = t.text
    soup = BeautifulSoup(html, "lxml")
    re_captchs = soup.find_all("input")
    captchs = re_captchs[0]
    check_capt = captchs['name']
    if check_capt != "_token":
        print("Ошибка. Первая капча была не правильной. Производим повторную отправку")
        data = {
            "captcha": send_captcha_base64(find_captcha_base64_frpage(0, origin_url)),
            "captchaData": find_captcha_data(1),
            "ret": "/"
        }
        session1 = ses.post(origin_url_gate, data=data, headers=headers)
        t = session1
        html = t.text


def send_form_to_secpage(sess, login, password):
    global session, html

    data = {"_token": "",
            "login": login,
            "password": password,
            "captchaData": find_captcha_data(3),
            "captcha": send_captcha_base64(find_captcha_base64_secpage(0))
            }
    session2 = sess.post(origin_url_login, data=data, headers=headers)
    r = session2
    html = r.text
    soup = BeautifulSoup(html, "lxml")
    new_tag = soup.new_tag('input', id='file_history')
    soup.body.insert(1, new_tag)
    soup = BeautifulSoup(html, "lxml")
    re_captchs = soup.find_all("input")
    captchs = re_captchs[0]
    check_capt = captchs['name']
    if check_capt != "query":
        print("Ошибка. Вторая капча была не правильной. Производим повторную отправку")
        new_tag = soup.new_tag('input', id='file_history')
        soup.body.insert(1, new_tag)
        data = {"_token": "",
                "login": login,
                "password": password,
                "captchaData": find_captcha_data(3),
                "captcha": send_captcha_base64(find_captcha_base64_secpage(0))
                }
        session2 = sess.post(origin_url_login, data=data, headers=headers)
        r = session2
        html = r.text


def sess_buy_page(link, sess):
    global session, html
    session3 = sess.get(link, headers=headers)
    r = session3
    html = r.text


def pars_momental_value():
    global html, soup, input_token, input_form_uuid, input_product_id, input_momental, input_type, input_roulette_id
    soup = BeautifulSoup(html, "lxml")
    new_tag = soup.new_tag('input', id='file_history')
    soup.body.insert(1, new_tag)
    inputs_tag = soup.find_all("input")
    pre_input_token = inputs_tag[2]
    pre_input_form_uuid = inputs_tag[3]
    pre_input_product_id = inputs_tag[4]
    pre_input_momental = inputs_tag[5]
    pre_input_type = inputs_tag[6]
    pre_input_roulette_id = inputs_tag[12]
    input_roulette_id = pre_input_roulette_id["value"]
    input_token = pre_input_token['value']
    input_form_uuid = pre_input_form_uuid['value']
    input_product_id = pre_input_product_id['value']
    input_momental = pre_input_momental['value']
    input_type = pre_input_type['value']


def buy(sess):
    global session, html, input_token
    data = {"_token": input_token,
            "form-uuid": input_form_uuid,
            "product_id": input_product_id,
            "momental": input_momental,
            "type": input_type,
            "storage_type_id": 0,
            "coupon": "",
            "payment": "balance",
            "roulette_id": input_roulette_id
            }
    session4 = sess.post(origin_url_momental_confirm, data=data, headers=headers)
    r = session4
    html = r.text


def feedback(sess):
    global session, html
    soup = BeautifulSoup(html, "lxml")
    order_id_s = soup.find_all("a")
    order_id = order_id_s[53]
    or_id = order_id["data-order"]
    inputs_tag = soup.find_all("input")
    pre_input_token = inputs_tag[1]
    token_for_feedback = pre_input_token["value"]
    data = {"_token": token_for_feedback,
            "review": random.choice(open('otziv.txt', 'r').read().splitlines()),
            "tips": 0,
            "tips-custom": 50,
            "rate": 10
            }
    session5 = sess.post("http://xxx" + or_id + "/review", data=data, headers=headers)
    r = session5
    html = r.text


def ip_adress(sess):
    global r_s_ip
    r = sess.get("http://httpbin.org/ip").text
    r_s = json.loads(r)
    r_s_ip = r_s["origin"]


def scripts(login, password, i):
    global session, headers
    for x in range(kol_vo):
        headers = random.choice(headers_list)

        renew_connection()
        session = get_tor_session()
        ip_adress(session)

        print("Успешно получен новый IP-адрес " + r_s_ip + " потоком - №" + i)
        time.sleep(random.randint(5, 9))

        send_captcha_to_formfp(session)
        print("Вход на первой странице выполнен успешно потоком - №" + i)
        time.sleep(random.randint(5, 9))

        send_form_to_secpage(session, login, password)
        print("Вход на второй странице выполнен успешно потоком - №" + i)
        time.sleep(random.randint(5, 9))

        sess_buy_page(product_href, session)
        print("Сессия страницы моменталки получена успешно потоком - №" + i)
        time.sleep(random.randint(5, 9))

        pars_momental_value()
        print("Страница мометалки была успешно пропарсена потоком - №" + i)
        time.sleep(random.randint(5, 9))

        buy(session)
        print("Товар был успешно куплен потоком - №" + i)
        time.sleep(random.randint(5, 9))

        feedback(session)
        print("Отзыв был успешно оставлен потоком - №" + i)
        print("Алгоритм был успешно выполнен потоком - №" + i)
        time.sleep(random.randint(5, 9))

th1 = threading.Thread(target=scripts, args=("mylogin1", "mypass1", "1"))
th2 = threading.Thread(target=scripts, args=("mylogin2", "mypass2", "2"))
th3 = threading.Thread(target=scripts, args=("mylogin3", "mypass3", "3"))
th1.start()
time.sleep(random.randint(15, 25))
th2.start()
time.sleep(random.randint(15, 25))
th3.start()

0 个答案:

没有答案