如何正确停止phantomjs执行

39 投票
7 回答
27806 浏览
提问于 2025-04-18 15:52

我在Python中启动和关闭了phantomjs,代码如下:

from selenium import webdriver    
driver = webdriver.PhantomJS()
driver.get(url)
html_doc = driver.page_source
driver.close()

但是在脚本执行结束后,我在我的Mac活动监视器中仍然能看到一个phantomjs的实例。实际上,每次我运行这个脚本时,都会创建一个新的phantomjs进程。

我应该怎么关闭这个驱动呢?

7 个回答

2

我在Windows 10上发现,driver.quit()这个命令没有效果,所以我在调用完driver.close()之后,添加了下面这一行:

os.system('taskkill /f /im phantomjs.exe')

这里是

/f = force
/im = by image name

因为这个方法只适用于Windows,所以最好在os.name == 'nt'的情况下才执行它。

6

我在Windows电脑上也遇到了类似的问题。用这两个方法都没能解决:

driver.close()

或者

driver.quit()

我尝试关闭PhantomJS窗口,但都不行。不过,当我同时使用这两个方法时,PhantomJS窗口终于正常关闭了。

driver.close()
driver.quit()
22

请注意,如果你的电脑上有多个线程或进程同时启动PhantomJS,这肯定会引发问题。

我见过很多人都遇到过同样的问题,但对我来说,最简单的解决办法是在你执行完 driver.close()driver.quit() 之后,通过Python在命令行中执行以下内容:

pgrep phantomjs | xargs kill
45

截至2016年7月,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
19

.close() 方法并不能保证会释放与驱动实例相关的所有资源。需要注意的是,这些资源包括但不限于驱动程序的可执行文件(在这个例子中是 PhantomJS)。而 .quit() 方法是专门用来释放驱动的所有资源的,包括退出可执行程序。

撰写回答