"async" 函数的 "await" 属性 在一个实例后休眠 - Javascript

The "await" property of "async" function sleeps after an instance - Javascript

我正在研究 scraper 。我正在使用 Phantom JS 和 Node JS。 Phantom JS 使用 async 函数加载页面,就像:var status = await page.open(url)。有时,由于网速较慢,页面需要更长的时间来加载,一段时间后页面 status 未 returned,以检查是否已加载。 page.open() 睡眠,return 什么都没有,所有的执行都在等待。

所以,我的基本问题是;有没有办法让这个 page.open(url) 保持活动状态,因为其余代码的执行要等到页面加载完毕。

我的密码是

const phantom = require('phantom');

ph_instance = await phantom.create();
ph_page = await ph_instance.createPage();

var status = await ph_page.open("https://www.cscscholarship.org/");

if (status == 'success') {
  console.log("Page is loaded successfully !");
  //do more stuff
}

根据您的评论,它似乎可能会超时(因为有时网速较慢)...您可以通过在代码中添加 onResourceTimeout 方法来验证这一点(link: http://phantomjs.org/api/webpage/handler/on-resource-timeout.html)

看起来像这样:

ph_instance.onResourceTimeout = (request) => {
    console.log('Timeout caught:' + JSON.stringify(request));
};

如果最终是这样,您可以像这样增加默认资源超时设置(link:http://phantomjs.org/api/webpage/property/settings.html):

ph_instance.settings.resourceTimeout = 60000 // 60 seconds

编辑:我知道这个问题是关于 phantom 的,但我还想提一下我之前用来抓取项目的另一个框架,叫做 Puppeteer (link: https://pptr.dev/) 我个人发现他们的 API 更容易理解和编写代码,并且它目前是一个维护项目,不像 Phantom JS 不再维护(他们的最后一个版本是两年前)。