Javascript 使用噩梦自动化ajax生成的网站

Javascript 使用噩梦自动化ajax生成的网站,javascript,node.js,automation,web-scraping,nightmare,Javascript,Node.js,Automation,Web Scraping,Nightmare,我正在使用自动化网站。到目前为止这一切都很好,但我注意到,当我想与动态加载的内容交互时,它存在一些问题。 甚至还有一种方法,它等待元素出现在页面.wait(#elementId),但它不适用于动态生成的内容 以前有人遇到过这个问题吗,或者你可以推荐一些其他的技术吗?我喜欢梦魇的地方是,它实际上并不是无头的,通过它与Electron的集成,它还有一个GUI,可以显示所做的一切。我希望这是可能的 编辑 为了更好地说明我的担忧,下面是我正在使用的代码,但它是抽象的: 假设我想搜索https://www

我正在使用自动化网站。到目前为止这一切都很好,但我注意到,当我想与动态加载的内容交互时,它存在一些问题。 甚至还有一种方法,它等待元素出现在页面
.wait(#elementId)
,但它不适用于动态生成的内容

以前有人遇到过这个问题吗,或者你可以推荐一些其他的技术吗?我喜欢梦魇的地方是,它实际上并不是无头的,通过它与Electron的集成,它还有一个GUI,可以显示所做的一切。我希望这是可能的

编辑 为了更好地说明我的担忧,下面是我正在使用的代码,但它是抽象的:

假设我想搜索
https://www.google.com
,但用于搜索的表单是通过库动态生成的。我的代码如下所示

vo(function* () {
var nightmare = Nightmare({ show: true });

var search = yield nightmare
    .goto('https://google.com')
    .wait('input[name="search"]')
    .type('input[name="search"]', ‘the term I am searching for’)
    .click('#submitButton')
    .wait(2000)
    .evaluate(function () {
        return $('input[name="search"]').val();
    });

yield nightmare.end();
return search;

})(function (err, result) {
    if (err) return console.log(err);
    console.log(result);
});
但由于
输入[name=“search”]
不是用html编写的,而是在页面加载后生成的,即使我可以在GUI中看到它,刮板也无法识别它,将永远等待。我猜它只适用于静态代码。有没有办法在一段时间后更新html或类似的内容?

将代码更新为:

.wait("input[type='text'][title='Search']")
.type("input[type='text'][title='Search']", 'the term I am searching for')
这个很好用。问题是组件正在等待
输入[name=“search”]
,而该输入从未附加到谷歌搜索的输入字段

更改为上述内容将解决您的问题
input[name=“search”]
这在谷歌的搜索栏上是不可用的,即使页面已经完全加载

另外,在运行测试脚本时使用
DEBUG=dream:actions节点--harmony test.js
,因为它将帮助您确定代码遇到的问题


希望这有帮助。

你能添加一些代码并解释你的卡在哪里吗???@TejusPrasad我在编辑中添加了一些代码你是使用PhantomJS还是Electron?PhantomJS有一个较小的默认视口,这会导致一个可能根本不包含
input[name=“search”]
的不同页面。此外,您的
类型
调用的引号被打断。您使用的是
,但您应该使用