如何正确停止phantomjs执行

Cpt*_*emo 38 python macos selenium phantomjs selenium-webdriver

phantomjs使用以下内容在Python中启动和关闭

from selenium import webdriver    
driver = webdriver.PhantomJS()
driver.get(url)
html_doc = driver.page_source
driver.close()
Run Code Online (Sandbox Code Playgroud)

在脚本结束执行后,我仍然phantomjs在我的Mac Activity Monitor中找到了一个实例.实际上,每次运行脚本时phantomjs都会创建一个新进程.

我应该如何关闭驱动程序?

lee*_*sky 46

截至7月2016,driver.close()driver.quit()不足以对我来说.这导致了node进程,但不是phantomjs它产生的子进程.

在讨论了这个GitHub问题之后,对我有用的单一解决方案就是运行:

import signal

driver.service.process.send_signal(signal.SIGTERM) # kill the specific phantomjs child proc
driver.quit()                                      # quit the node proc
Run Code Online (Sandbox Code Playgroud)

  • 这种方法对我来说效果最好(截至此评论日期).我也发现了Github问题,但想在这里加入它! (3认同)

whi*_*win 22

请注意,如果您的计算机上有多个线程/进程启动PhantomJS,这显然会造成麻烦.

我见过几个人用同样的问题而大伤脑筋,但对我来说,最简单的解决方法/黑客是在您调用执行从通过Python的命令行下面driver.close()driver.quit():

pgrep phantomjs | xargs kill
Run Code Online (Sandbox Code Playgroud)

  • 如果你要偷工减料,你可以使用`killall phantomjs` (2认同)

Jim*_*ans 18

.close()不保证该方法释放与驱动程序实例关联的所有资源.请注意,这些资源包括但不限于驱动程序可执行文件(在本例中为PhantomJS).该.quit()方法旨在释放驱动程序的所有资源,包括退出可执行进程.

  • 我把'.close()`和`.quit()`都给了我,对我不起作用 (4认同)

小智 6

我在Windows机器上遇到了类似的问题.我也没有运气

driver.close()
Run Code Online (Sandbox Code Playgroud)

要么

driver.quit()
Run Code Online (Sandbox Code Playgroud)

实际上关闭了PhantomJS窗口,但当我同时使用它们时,PhantomJS窗口最终关闭并正确退出.

driver.close()
driver.quit()
Run Code Online (Sandbox Code Playgroud)