I’m writing a script to access a website using proxies with multiple threads but now I’m stuck in multiple threads, when I run the script below, it opens 5 browsers but all 5 use 1 proxy, I want 5 browsers to use different proxies, can someone help me complete it? thank you
Here is my script :
from selenium import webdriver from selenium import webdriver import time , random import threading def e(): a = open("sock2.txt", "r") for line in a.readlines(): b = line prox = b.split(":") IP = prox[0] PORT = int(prox[1].strip("n")) print(IP) print(PORT) profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 1) profile.set_preference("network.proxy.socks", IP) profile.set_preference("network.proxy.socks_port", PORT) try: driver = webdriver.Firefox(firefox_profile=profile) driver.get("http://www.whatsmyip.org/") except: print("Proxy Connection Error") driver.quit() else: time.sleep(random.randint(40, 70)) driver.quit() for i in range(5): t = threading.Thread(target=e) t.start()
(Wish everyone has a happy and lucky new year)
Advertisement
Answer
Dominik Lašo captured it correctly – each threads processes the file from the beginning. Here’s probably how it should look like:
from selenium import webdriver from selenium import webdriver import time , random import threading def e(ip, port): profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 1) profile.set_preference("network.proxy.socks", IP) profile.set_preference("network.proxy.socks_port", PORT) try: driver = webdriver.Firefox(firefox_profile=profile) driver.get("http://www.whatsmyip.org/") except: print("Proxy Connection Error") driver.quit() else: time.sleep(random.randint(40, 70)) driver.quit() my_threads = [] with open("sock2.txt", "r") as fd: for line in fd.readlines(): line = line.strip() if not line: continue prox = line.split(":") ip = prox[0] port = int(prox[1]) print('-> {}:{}'.format(ip, port)) t = threading.Thread(target=e, args=(ip, port,)) t.start() my_threads.append(t) for t in my_threads: t.join()