【发布时间】:2016-11-05 16:48:54
【问题描述】:
我正在抓取一个使用 React 组件的网站,在 Nodejs 中使用 PhantomJS。
有了这个:https://github.com/amir20/phantomjs-node
代码如下:
phantom.create().then(ph => {
_ph = ph;
return _ph.createPage();
}).then(page => {
_page = page;
return _page.open(url);
}).then(status => {
return _page.property('content');
}).then(content => {
console.log(content);
_page.close();
_ph.exit();
}).catch(e => console.log(e));
问题是没有渲染反应内容,它只说:<!-- react-empty: 1 -->" 应该在哪里加载实际的反应组件。
如何废弃渲染的 React 组件?我最初从纯节点请求解决方案切换到 PhantomJS 来解决这个问题,但现在我被卡住了。
更新:
所以我还没有真正的解决方案。我切换到 NightmareJS (https://github.com/segmentio/nightmare),它有一个很好的 .wait('.some-selector') 函数,它一直等到指定的选择器被加载。这解决了我动态加载的反应组件的问题。
【问题讨论】:
-
这个包是否支持接收 page.onError 回调?有没有错误?
-
是的,有
console.log(status);,它返回成功。我得到了整个 HTML 内容,除了我得到<!-- react-empty: 1 -->的反应组件 -
我怀疑
status如果来自page.open回调,您需要检查 page.onError 回调中的错误。可能是这样的:Why I am not able to render my ReactJS application using PhantomJS
标签: javascript node.js reactjs web-scraping phantomjs