Selenium线程:如何在多个线程中打开相同的浏览器?出于每个浏览器的目的使用唯一代理

时间:2017-01-18 09:52:54

标签: python multithreading python-3.x selenium multiprocessing

import threading

def rand_function1():
  #random actions

def rand_function2():
  #random actions

def main()
  rand_function1
  rand_function2
  return


if __name__ == '__main__':
    url_list = "https://www.rand_urls.com/"
    driver = webdriver.Firefox()
    for t in range(10):
        t = threading.Thread(target=main)
        t.start()

我有这个简单的程序,我试图使用10个Firefox网络驱动程序打开网址。然而,所有这一切都使用一个浏览器并继续循环虽然网址认为个人浏览器。我将为每个浏览器使用一个唯一的代理,因此打开选项卡不会是一个选项。

如何让n个线程使用自己的Firefox Web驱动程序单独运行main函数?

2 个答案:

答案 0 :(得分:4)

根据thisthis上一个问题,selenium 不是线程安全的

您应该在main中创建驱动程序,以便每个线程都有自己的驱动程序。

import threading

def rand_function1():
  #random actions

def rand_function2():
  #random actions

def main()
  # use a different driver for each thread
  driver = webdriver.Firefox()
  rand_function1
  rand_function2
  return


if __name__ == '__main__':
    url_list = "https://www.rand_urls.com/"
    for t in range(10):
        t = threading.Thread(target=main)
        t.start()

答案 1 :(得分:-1)

urls = ['url1','url2',...]
driver = webdriver.Chrome("C:\Program Files (x86)\chromedriver.exe")
for url in urls:
driver.execute_script('window.open("%s")' % url)

此选项在打开多个标签时效果很好 但是就使用代理服务器而言,我还没有尝试使用代理服务器。希望它有帮助