使用线程 Python 用于 Instagram BOT

Threading Using Python For Instagram BOT

我正在尝试用 selenium 制作一个可以同时使用多个帐户的 Instagram BOT。因此,我需要使用线程。我有 2 个帐户,用户名和密码保存在一个文本文件中。问题是,我无法同时登录这两个帐户。我必须在代码中做哪些更改才能做到这一点?

如有错误请见谅...

from selenium import webdriver
from time import sleep
import threading

def functions():
    a = open('users.txt','r').readlines()
    for i in a:
        info = i.split()
        driver = webdriver.Firefox()
        driver.get('https://instagram.com')
        sleep(5)
        driver.find_element_by_name('username').send_keys(info[0])
        driver.find_element_by_name('password').send_keys(info[1])
        driver.find_element_by_class_name('sqdOP.L3NKy.y3zKF').click()


for _ in range(2):
    t = threading.Thread(target=functions)
    t.start()

您的代码的一个主要问题可能是每个线程读取整个文件,如果您的文件有两行,它将打开四个浏览器。

另一个问题是您在点击登录按钮之前,应该关闭 cookie 弹出窗口。

请注意,要启用登录按钮,密码长度必须至少为 6 个字符。

以下可以作为解决方案的示例:

from selenium import webdriver
from time import sleep
from concurrent.futures import ThreadPoolExecutor


def functions(line):
    info = line.split()
    driver = webdriver.Firefox()
    driver.get('https://instagram.com')
    sleep(5)
    driver.find_element_by_class_name("mt3GC").find_element_by_class_name("aOOlW.bIiDR").click()  # close cookie
    driver.find_element_by_name('username').send_keys(info[0])
    driver.find_element_by_name('password').send_keys(info[1])
    driver.find_element_by_class_name('sqdOP.L3NKy.y3zKF').click()

if __name__ == '__main__':    
    a = open('users.txt', 'r').readlines()
    with ThreadPoolExecutor(max_workers=2) as executor:
         for i in a:
             future = executor.submit(functions, i)