You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.0 KiB
41 lines
1.0 KiB
1 year ago
|
import Hero from '@ulixee/hero';
|
||
|
import configs from '../config.mjs';
|
||
|
|
||
|
class Kuaishou {
|
||
|
constructor(heroCloudServer) {
|
||
|
this.heroServer = heroCloudServer ? heroCloudServer : '';
|
||
|
}
|
||
|
|
||
|
async scrap(url) {
|
||
|
let data = {};
|
||
|
|
||
|
try {
|
||
|
let options = {};
|
||
|
if (this.heroServer) {
|
||
|
options.connectionToCore = this.heroServer;
|
||
|
}
|
||
|
|
||
|
const hero = new Hero(options);
|
||
|
await hero.goto(url, configs.heroBotOptions);
|
||
|
|
||
|
//等待所有内容加载完成
|
||
|
const tab = await hero.activeTab;
|
||
|
await tab.waitForLoad('AllContentLoaded', {timeoutMs: configs.heroTabOptions.timeoutMs});
|
||
|
|
||
|
//解析网页HTML数据
|
||
|
data.title = await hero.document.title;
|
||
|
const elem = await hero.detach( hero.document.querySelector('.video-container-player') );
|
||
|
data.cover = elem.getAttribute('poster');
|
||
|
|
||
|
await hero.close();
|
||
|
}catch(error) {
|
||
|
console.error("Error got when request %s via hero: %s", url, error);
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
export default Kuaishou;
|