如何正确停止phantomjs执行
我在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()
方法是专门用来释放驱动的所有资源的,包括退出可执行程序。