2015-02-11 67 views
7

我有一个长期运行的python应用程序,它会定期(每隔30-60秒)用硒和铬驱动程序打开一个网页,运行一些JavaScript并截取屏幕截图。它在一个EC2 ubuntu实例上运行,在Xvfb中使用chrome,大多数情况下,一切正常,除了间歇性的程序会挂起。这是发生在这些线路之一:Selenium Chromedriver挂起?

options = Options() 
    options.add_argument("--disable-web-security") 
    options.add_argument("--webdriver-logfile=webdrive.log") 
    dc = DesiredCapabilities.CHROME 
    dc['loggingPrefs'] = {'browser': 'ALL'} 
    driver = webdriver.Chrome(chrome_options=options, desired_capabilities=dc) 
    driver.get(url); 

(我没有一个确切的线,但我从我已经把调试语句知道这是什么地方在这里之间)

不幸的是,程序不会崩溃,所以它没有任何错误信息,它只是从昨晚7点开始无休止地等待。运行strace -p 'python program pid'回报:wait4(-1,和运行strace -p 'chromedriver pid'回报recvfrom(20,

我可以ps axjf看到该进程仍在运行,它只是没有做任何事情。我有点不知所措,有什么建议?

chromedriver版本:2.10.267518

谷歌浏览器40.0.2214.111

硒(安装了PIP):2.42.1

#https://github.com/cgoldberg/xvfbwrapper 
xvfb = Xvfb(width=1920, height=1920) 
xvfb.start() 

---- ----编辑

我刚更新到ChromeDriver 2.14.313457Selenium 2.44.0,希望这可以解决这个问题。我现在要离开这个。感谢迄今为止的建议家伙!

---- ----编辑

因此该服务最终仍挂。我想知道是否这是因为对于每个截图我都关闭并重新启动google-chrome?这是否可能导致内存泄漏?我怎么能诊断这个?

+1

如果未指定铬选项,它会挂起吗?你使用哪种硒和铬版本? – alecxe 2015-02-11 20:36:03

+0

另外,尝试添加调试日志消息并查看挂在哪条线上。另外,请说明如何启动'xvfb'。谢谢。 – alecxe 2015-02-11 20:43:00

+0

查看我的编辑。我已经在发生这种事情的几次时间里添加了调试消息,但我想我还不够彻底。 – Trevor 2015-02-11 20:47:07

回答

1

我从来没有找到导致此问题的特定代码段,但创建一个新的Xvfb实例与每个驱动程序加载似乎已修复它。也许在硒和Xvfb之间的相互作用中存在内存泄漏?无论哪种方式,将其标记为关闭。

6

我遇到了类似的问题,并找到了答案here并对其进行了博客here。设置环境变量DBUS_SESSION_BUS_ADDRESS =/dev/null为我工作,而不必一直重新启动Xvfb。

相关问题