Как позволить пользователю решить, сколько потоков/задач он хочет запустить?

#python #multithreading #selenium #bots

Вопрос:

я программирую маленького кроссовочного бота на python с помощью selenium, и я уже закончил с основной частью. Последние две части, которые мне нужно запрограммировать, это то, как я могу позволить пользователю вводить свои имена пользователей и пароли для своих учетных записей в одном текстовом файле, или я слышал, что файл json тоже был бы хорош, как я могу получить доступ к этим данным с помощью программы и, наконец, как я могу позволить пользователю создавать потоки/задачи с определенным именем пользователя и паролем для каждого потока. Я надеюсь, что вы понимаете мой английский, и, возможно, под вашим началом есть несколько парней, которые могут помочь мне с последней частью.

Ответ №1:

Для получения имен пользователей и паролей из файла вы можете просто использовать:

 f = open(path_to_file)
infolist = f.readlines()
f.close()
 

Это добавит новый элемент в список для каждой строки файла, что означает, что вам просто нужно поместить имена пользователей и пароли в каждую отдельную строку. Будьте осторожны, потому что ввод паролей в текстовый файл, как правило, не очень безопасен, поэтому убедитесь, что вы осознаете риски.

Что касается второй части, я бы создал список, который можно заполнить потоками, используя цикл for, диапазон которого определяется пользовательским вводом. Затем во время итерации дайте аргументу «args» определенные элементы списка учетных данных, необходимые для его задачи. Пример ниже:

 from threading import *

def spawnScraper(username, password):
    print(f'{username} and {password}')
    ## run the instance here

def main():
    #f = open(path_to_file)
    #infolist = f.readlines()
    #f.close()
    # ^ above code to retrieve data from file
    infolist = ['user1', 'pass1', 'user2', 'pass2']  # using for demonstration
    threadnum = int(input('num >>> '))

    threads = []  # create list to store threads

    for threaditem in range(threadnum):
        uname = infolist[threaditem*2]  # get information from infolist
        pword = infolist[threaditem*2 1]
        threads.append(Thread(target=spawnScraper, args=[uname, pword]))  # create thread
        threads[-1].start()  # start thread

main()
 

Обязательно раскомментируйте раздел открытия файла для фактического включения в вашу программу. Если у вас есть какие-либо другие вопросы, обязательно прокомментируйте их ниже.

Комментарии:

1. Спасибо за быстрый ответ. Ко второй части, не могли бы вы привести мне пример для этого? И на самом деле я задал неправильный вопрос, потому что, прежде чем я смогу подумать о том, как пользователь может запускать все созданные им задачи, я должен выяснить, как позволить пользователю создавать задачи и как их сохранять…На самом деле я изучу все это, я должен лучше узнать модуль потока, прежде чем я смогу задавать конкретные вопросы.

2. Не беспокойтесь, я посмотрю, смогу ли я создать прототип системы, как вы указали.

3. Вау, большое вам спасибо! Это выглядит уже очень хорошо, даже если я не понимаю, что такое части вида, потому что я никогда не видел их раньше. Итак, правильно ли я понимаю, что пользователь может решить, сколько потоков он хочет запустить, даже если для каждого потока нет имени пользователя и пароля? Поэтому в основном мне нужна программа, в которой пользователь может выбрать создание нового потока и где пользователь может предоставить потоку конкретные данные для входа, которые будут использоваться только этим потоком. Кроме того, пользователь должен иметь возможность ввести размер, например 40 или 39, и страницу продукта, код, который будет работать с номером размера

4. ,страница продукта и данные для входа уже завершены мной, мне нужны только разные потоки, которые будут запускать этот код с разным размером, данными для входа и страницей продукта. И можно ли было бы сохранить созданные потоки в файле или что-то в этом роде, чтобы пользователю не приходилось создавать новые задачи/потоки каждый раз, когда он снова запускает сценарий?

5. Ну, в его текущем виде код будет ошибаться, если запрашивается больше потоков, чем количество учетных данных, однако вы можете заполнить текстовый файл «Нет» или подобным образом, если хотите, чтобы определенным потокам не требовались учетные данные. Что касается сохранения потоков, я не верю, что это возможно, за исключением, может быть, модуля «рассол» (посмотрите, если хотите). Кроме того, если вы хотите, чтобы информация о странице продукта была включена в текстовый файл, просто поместите их над именами пользователей и учтите изменение определения функции, списка аргументов и измените «threaditem*2» на «threaditem*3». Любые другие вопросы, просто прокомментируйте. 🙂