1

how can I access iframe with random generated name using nightmare-iframe plugin?

I have tried

var name = yield nightmare
  .goto(defaultUrl)
  .click('.btn-login')
  .wait('iframe')
  .evaluate(function() {
    return document.getElementsByTagName('iframe');
  });

yield nightmare.use(iframe.withFrameName(name, function(IFnightmare) {
  IFnightmare
    .type('input[name=username]', 'username')
    .type('input[name=password]', 'password')
    .click('button[type=submit]')
}))

but this code ends with - TypeError: Cannot read property 'switchToFrame' of undefined

4

1 回答 1

2

nightmare-iframe与 Nightmare >2.x 不兼容 - 它希望能够调用switchToFrameElectron 中不存在的 PhantomJS' 。

从这里开始,我认为您有两个选择:

  1. 回退到 Nightmare 1.8.x。它不再受支持(据我所知),但它以 PhantomJS 作为支持渲染器运行。
  2. 使用不同的库。 这个 PR被提议作为在使用 Electron 运行时解决长期存在的 iframe 问题,作为让 Nightmare 执行您需要的类似操作的一种可能方式。我将其重写为插件,这可能对您有用。(那个插件危险,小心使用。)

为了完整起见,我还应该指出,已经为 Nightmare 的下一个主要版本提出了原生 iframe 支持。

于 2016-07-15T16:24:51.483 回答