用梦魇自动化ajax生成的网站
Automating ajax generated websites with nightmare
我正在使用噩梦来自动化网站。到目前为止,它很好,但我注意到,当我想与动态加载的内容交互时,它会出现一些问题。甚至还有一种方法,它等待元素出现在页面.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);
});
但由于input[name="search"]
不是用html编写的,而是在页面加载后生成的,即使我可以在GUI中看到它,scraper也无法识别它,将永远等待。我猜它只适用于静态代码。有没有一种方法可以在一段时间后更新html,或者类似的东西?
将代码更新为:
.wait("input[type='text'][title='Search']")
.type("input[type='text'][title='Search']", 'the term I am searching for')
这非常好用。问题是该组件正在等待input[name="search"]
,它从未附加到谷歌搜索的输入字段。
更改为以上内容将解决您的问题。input[name="search"]
这在谷歌的搜索栏上是不可用的,即使页面已经完全加载。
此外,在运行测试脚本时使用DEBUG=nightmare:actions node --harmony test.js
,因为它将帮助您确定代码所处的操作。
希望这能有所帮助。
相关文章:
- 基于AJAX的网站中的JS window.location
- 使用Ajax登录网站
- 我使用ajax对我的网站的详细信息页面进行一些动态处理,但我得到了非常不好的结果
- 你应该在AJAX内容网站上使用hashbang,还是只使用普通的URL
- 创建具有多个子文件夹链接的Ajax网站失败
- ajax网站的谷歌分析页面视图
- Ajax jquery:一个由不同页面构建的页面网站
- 从 ajax 驱动的网站检索渲染的 html
- 如何使 AJAX 网站可抓取
- 从客户端网站使用 ajax/jquery 将参数传递给 Web 服务方法
- 使用JavaScript,PHP Ajax和Zend框架创建响应式网站的标准方法是什么?
- 在通过AJAX加载的DOM中运行动态注入的javascript(尝试使用历史记录ajax化网站.js)
- 如何在我的基于ajax html5的网站模板 http://www.musicep.com/ 上插入广告?我尝试了一切,
- 使用 jQuery ajax 请求外部网站数据
- Laravel网站在外部javascript文件中不使用Ajax
- 谷歌浏览器更新并破坏了我网站的ajax/jquery/json/something
- 在网站 mvc 中接收 ajax 响应
- 通过 ajax 在网站上提醒用户
- 允许访客和网站成员查看谁在线/登录使用AJAX,PHP / PDO,CSS,HTML
- 如何使用 AJAX 浏览网站