"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 不再维护(他们的最后一个版本是两年前)。
我正在研究 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 不再维护(他们的最后一个版本是两年前)。