【问题标题】:PhantomJS process keeps running in background after calling program.kill()PhantomJS 进程在调用 program.kill() 后继续在后台运行
【发布时间】:2017-01-27 13:49:15
【问题描述】:

我正在使用 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。

我想知道为什么进程没有终止。

【问题讨论】:

    标签: selenium phantomjs webdriver-io


    【解决方案1】:

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

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

    PhantomJS 错误报告:https://github.com/detro/ghostdriver/issues/162

    有人在该线程的底部发布了一个不错的解决方法: https://github.com/SeleniumHQ/selenium/issues/767#issuecomment-140367536 此修复程序会发送一个 SIGTERM 来结束它:(在 python 中,但可能有用)

    # assume browser = webdriver.PhantomJS()
    browser.service.process.send_signal(signal.SIGTERM)
    browser.quit()
    

    我喜欢用我的自动化工具打开一个 Docker 容器,然后在其中运行它。 Docker 为我关闭了它,但是这超出了你想做的范围。我会推荐上面的 SIGTERM+quit 方法。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 感谢您的回答,不过我不确定如何实现。我正在运行一个节点应用程序,所以我只是在我的脚本中做了一个npm install 并要求phantomjs。由于我没有使用独立服务器,我不确定这是否可行
      猜你喜欢
      • 2018-07-13
      • 2015-11-09
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多