nodeJS的phantomJS网站截图如何等待网页脚本执行完?(比如js执行ajax获取的数据)

Leon
  • 1.9k

问题描述

现在我要抓取一个网站的截图。

但是我发现截图出来的是未执行页面脚本JS的图,我看了很多文档和网友解答,无奈自己的搜索能力有点差,一直找不到对应的问题解决方案。

比如这个页面有大概几个XHR类型获取的数据形成的列表,我该如何在页面完全加载和执行JS后再去截图?

下面是我的代码

const phantom = require('phantom');

let count = 0;

(async function () {
  const instance = await phantom.create();
  const page = await instance.createPage();
  const status = await page.open('http://wenshu.court.gov.cn/list/list/?sorttype=1&number=TMSVETRT&guid=31e005b5-868f-ae69cf1d-c65e96bcf639&conditions=searchWord+%E5%BD%93%E4%BA%8B%E4%BA%BA+++%E5%BD%93%E4%BA%8B%E4%BA%BA:%E5%BA%84%E6%9C%9D%E6%99%96');
  await page.evaluate(function() { // 是在这里执行吗?有疑问
    return document.body.innerHTML;
  }).then(function(html){
    console.log(html);
  });
  if (status == 'success') {
     await page.render('./lalal.png');
  }
  await instance.exit();
})();


回复
阅读 2.7k
2 个回答
✓ 已被采纳

puppeteer.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://wenshu.court.gov.cn/list/list/?sorttype=1&number=TMSVETRT&guid=31e005b5-868f-ae69cf1d-c65e96bcf639&conditions=searchWord+%E5%BD%93%E4%BA%8B%E4%BA%BA+++%E5%BD%93%E4%BA%8B%E4%BA%BA:%E5%BA%84%E6%9C%9D%E6%99%96');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

别用phantomjs了,现在chrome都支持headless了,p的作者自己都说不建议使用了。
puppeteer和selenium有很多选择的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏