在解决Captcha时,程序会一起使用Flask和Multiprocessing

时间:2017-12-30 14:32:30

标签: python flask multiprocessing recaptcha

所以我一直在玩Captcha,Multiprocessing和Flask。

到目前为止我做了什么:

基本上我所做的是我已经创建了自己的Mutltiprocessing,我在这个脚本中输入了我想要运行的任务/处理器数量。它会说如果我输入3那么它会给我一个3"线程"哪个工作正常。

每当webbrowser.open('http://Thrillofit.baller.com:5000/solve')打开时,它也会起作用。还可以获得能够解决的验证码。

基本上意味着验证码确实有效,而且多处理也是如此:

那么问题是什么?

问题是现在坐在我运行程序时它会在解决时卡住,基本上我可以解决我想要的多少验证码但是它不会继续,我无法掌握原因?关于正在发生的事情的GIF图片:https://i.gyazo.com/d5f183471f20be5eda6be939d255a157.mp4

在视频中你可以看到我正在尝试解决验证码,但程序没有发生任何事情,就像它被卡住一样。

我的想法是多处理和Captcha / flask之间可能存在问题,但是我无法看到问题而且我在这一点上完全失明了。也许有人可能会看到这个问题?

目标是每当我解决验证码时,它应该打印出一个令牌(在def passwd():方法内部,但没有打印出来,只是卡住了......

import requests, time, json, re, sys, os, timeit, random, multiprocessing, traceback, threading, names, logging, webbrowser, _thread
from flask import Flask, render_template, request, redirect

tokens = []

def captureToken(token):
    expiry = datetime.now().timestamp() + 115
    tokenDict = {
        'expiry': expiry,
        'token': token
    }
    tokens.append(tokenDict)
    return


def sendToken():
    while not tokens:
        pass
    token = tokens.pop(0)
    return token['token']


def manageTokens():
    while True:
        for item in tokens:
            if item['expiry'] < datetime.now().timestamp():
                tokens.remove(item)
        time.sleep(5)


app = Flask(__name__)

log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)


@app.route('/', methods=['GET'])
def base():
    return redirect("http://Thrillofit.baller.com:5000/solve", code=302)


@app.route('/solve', methods=['GET'])
def solve():
    sitekey = "6LdyFRkUAAAAAF2YmQ9baZ6ytpVnbVSAymVpTXKi"
    return render_template('index.html', sitekey=sitekey)


@app.route('/submit', methods=['POST'])
def submit():
    token = request.form.get('g-recaptcha-response', '')
    captureToken(token)
    return redirect("http://Thrillofit.baller.com:5000/solve", code=302)



def info(thread):
    global prod
    prod = int(thread) + 1
    passwd()


def passwd():
    lilcapttoken = sendToken()
    print(lilcaptoken)


def main():

    webbrowser.open('http://Thrillofit.baller.com:5000/solve')

    user_input = 0
    while True:
        try:
            user_input = int(input(Fore.WHITE + 'How many tasks do you wanna run? [NUMBERS] \n' + Fore.RESET))
        except ValueError:
            print(Fore.RED + "Stop being stupid" + Fore.RESET)
            continue
        else:
            HowManyThread = user_input
            print()
            i = 0
            jobs = []
            for i in range(HowManyThread):
                p = multiprocessing.Process(target=info, args=(str(i),))
                jobs.append(p)
                time.sleep(.5)
                p.start()

            for p in jobs:
                p.join()

            sys.exit()


if __name__ == '__main__':
    try:
        _thread.start_new_thread(app.run, ())
        _thread.start_new_thread(manageTokens, ())
        main()

    except Exception as e:
        print(e)
        print(traceback.print_exc())
        print(traceback)

0 个答案:

没有答案