Selenium PhantomJS进程在调用program.kill()后一直在后台运行

Selenium PhantomJS进程在调用program.kill()后一直在后台运行,selenium,phantomjs,webdriver-io,Selenium,Phantomjs,Webdriver Io,我正在使用phantomjs和webdriverio获取并呈现一个由javascript加载的网页,然后将其保存以供cheerio稍后解析。 下面是代码: import phantomjs from 'phantomjs-prebuilt' const webdriverio = require('webdriverio') const wdOpts = { desiredCapabilities: { browserName: 'phantomjs' } } async p

我正在使用phantomjs和webdriverio获取并呈现一个由javascript加载的网页,然后将其保存以供cheerio稍后解析。 下面是代码:

import phantomjs from 'phantomjs-prebuilt'
const webdriverio = require('webdriverio')

const wdOpts = {
  desiredCapabilities: {
    browserName: 'phantomjs'
  }
}

async parse (parseUrl) {
  return phantomjs.run('--webdriver=4444').then(program => {
    return webdriverio.remote(wdOpts)
      .init()
      .url(parseUrl)
      .waitForExist('.main-ios', 100000)
      .pause(5000)
      .getHTML('html', true)
      .then((html) => {
        program.kill()
        return html
      })
  })
}
尽管我调用了
program.kill()
,但我注意到进程列表中的phantomjs确实占用了相当多的RAM和CPU


我想知道为什么这个过程没有终止。

PhantomJS是一个由两部分组成的产品。Javascript作为代码的一部分在客户端(无论是web还是其他脚本)上运行。然后是作为服务器端应用程序运行的部分(命令行调用)

根据我对PhantomJS的经验,当遇到错误时,PhantomJS服务器端“挂起”,但没有响应。如果您可以更新对此脚本的调用以提供输出日志记录,那么您可以看到PhantomJS应用程序遇到了什么错误

phantomjs /path/to/script/ > /path/to/log/file 2>&1

希望这有帮助!如果您想让我澄清任何事情,或详细说明,我很高兴更新我的答案,请在评论中告诉我,谢谢

PhantomJS是一种由两部分组成的产品。Javascript作为代码的一部分在客户端(无论是web还是其他脚本)上运行。然后是作为服务器端应用程序运行的部分(命令行调用)

根据我对PhantomJS的经验,当遇到错误时,PhantomJS服务器端“挂起”,但没有响应。如果您可以更新对此脚本的调用以提供输出日志记录,那么您可以看到PhantomJS应用程序遇到了什么错误

phantomjs /path/to/script/ > /path/to/log/file 2>&1
希望这有帮助!如果您想让我澄清任何事情,或详细说明,我很高兴更新我的答案,请在评论中告诉我,谢谢

.close()只关闭窗口。有一个已知的bug,如果它是最后一个保持打开状态的窗口

.quit()应该这样做,但也存在与此相关的问题

PhantomJS错误报告:

有人在该线程的底部发布了一个不错的解决方案: 此修复程序使用SIGTERM来结束它:(在python中,但可能有用)

我喜欢用我的自动化打开一个Docker容器,并在其中运行它。Docker帮我把它关了起来,但这显然超出了你想做的范围。。我建议使用上面的SIGTERM+quit方法。

.close()只需关闭窗口。有一个已知的bug,如果它是最后一个保持打开状态的窗口

.quit()应该这样做,但也存在与此相关的问题

PhantomJS错误报告:

有人在该线程的底部发布了一个不错的解决方案: 此修复程序使用SIGTERM来结束它:(在python中,但可能有用)


我喜欢用我的自动化打开一个Docker容器,并在其中运行它。Docker帮我把它关了起来,但这显然超出了你想做的范围。。我推荐上面的SIGTERM+quit方法。

谢谢你的回答,但我不知道如何实现。我正在运行一个节点应用程序,所以我只需在脚本中安装一个
npm
,并需要
phantomjs
。因为我没有使用独立服务器,所以我不确定这是否可行。对于答案,我不确定如何实现。我正在运行一个节点应用程序,所以我只需在脚本中安装一个
npm
,并需要
phantomjs
。因为我没有使用独立服务器,所以我不确定这是否可行