使用Selenium进行Python线程处理

时间:2018-03-08 08:27:20

标签: multithreading python-3.x selenium

我正在尝试在多个实例中使用Splinter(Selenium的包)。但是,在第一个线程完全完成之前,实例才会启动。因此,浏览器实例打开,加载页面,休眠,然后才开始第二个线程。

我需要同时运行实例。

import threading
import time
from splinter import Browser


def worker(proxy, port):
    proxy_settings = {"network.proxy.type": 1,
                      "network.proxy.ssl": proxy,
                      "network.proxy.ssl_port": port,
                      "network.proxy.socks": proxy,
                      "network.proxy.socks_port": port,
                      "network.proxy.socks_remote_dns": True,
                      "network.proxy.ftp": proxy,
                      "network.proxy.ftp_port": port
                      }

    browser = Browser('firefox',
                      profile_preferences=proxy_settings,
                      capabilities={'pageLoadStrategy': 'eager'}) #eager or normal
    print("Proxy: ", proxy, ":", proxy)
    browser.visit("https://mxtoolbox.com/whatismyip/?" + proxy)
    time.sleep(2)


ip1 = '22.22.222.222'
ip2 = '222.222.22.222'
p1 = int(2222)
p2 = int(2222)

p = []
p.append((ip1,p1))
p.append((ip2,p2))
x = 0
for pp in p:
    threading.Thread(target=worker(pp[0], pp[1])).start()

在我更长的代码中(以上是我试图弄清楚为什么我不能多线程)我在编辑器中也遇到错误

  

未使用本地变量'浏览器'值

1 个答案:

答案 0 :(得分:1)

那是因为你没有使用worker函数启动一个帖子,实际上最后一行应该是这样的:

threading.Thread(target=worker, args=(pp[0], pp[1])).start()

至于你的编辑问题,我说这是编辑依赖的,没有任何信息,很难说(我提到运行pylint并不表示这样做警告)