从线程

时间:2016-06-15 00:13:05

标签: python multithreading selenium

尝试处理webdriver超时的创建(偶尔发生一次here)。我无法使用基于信号的超时,因为我的服务器在Windows上运行,所以我一直在尝试寻找替代方案。

我查看了来自eventlet的超时,但我认为不会削减它。 time.sleep(10000)不会触发超时,所以我认为超时本身不会。

我在想的是调用一个线程来创建并返回浏览器,然后设置一个连接超时。如下所示:

def SpawnPhantomJS(dcap, service_args):

    browser = webdriver.PhantomJS('C:\phantomjs.exe',desired_capabilities=dcap, service_args=service_args)
    print "browser made!"
    return browser

proxywrite = '--proxy=',nextproxy
        service_args = [
        proxywrite,
        '--proxy-type=http',
        '--ignore-ssl-errors=true',
        ]

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (nextuseragent)


newDriver = Thread(target=SpawnPhantomJS, args=[dcap, service_args]).start().join(20)

所以我在理论上如何正确地执行此操作的语法存在一些问题。如果创建停止,SpawnPhamtomJS线程将停止而不是主线程,因此超时连接应该有助于它继续前进。

这可能吗?我可以在线程中创建一个webdriver并将其返回吗?任何一点赞赏。

更新

只是调用一个函数返回一个webcontrol,这样就可以预示我正在做的事情。

newDriver = SpawnPhantomJS(dcap, service_args)

所以我希望这只是一个语法问题,我把它作为一个超时的线程来运行。

然而,这并没有这样做:

spawnthread = Thread(target=SpawnPhantomJS, args=[dcap, service_args])
spawnthread.start()
newDriver = spawnthread.join()

那里一厢情愿。

1 个答案:

答案 0 :(得分:0)

线程池。

rstackdeque