我正在尝试将我的操纵up结果写入txt,但是我无法使其工作。 txt已创建,但为空
我正在使用process.exit,但不知道这是否正确
我知道textContent不为空,因为我可以控制台记录其内容
var https = require('https');
var Q = require('q');
var fs = require('fs');
var puppeteer = require('puppeteer');
const url = 'https://www.99freelas.com.br/projects'
/*const idToScrape;
deverá receber qual a url e os parametros específicos dela */
async function genScraper() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
var textContent = await page.evaluate(() => {
const ali = Array.from(document.querySelectorAll('.result-list li'));
return ali.map(li => li.textContent)
});
fs.writeFile('res.txt', textContent, (err) => {
if (err) throw err;
});
const innerText = await page.evaluate(() => {
const ali = Array.from(document.querySelectorAll('.result-list li'));
return ali.map(li => li.innerText);
});
process.exit();
}
//not used
function gravaArquivo(arquivo) {
var deferido = Q.defer();
fs.writeFileSync('resultado.txt', arquivo, function(err) {
deferido.resolve(true);
console.log('aqui estou')
});
return deferido.promise;
}
genScraper();
答案 0 :(得分:1)
fs.writeFile()
是一个异步函数,因此process.exit();
是在fs.writeFile
完成之前执行的。
您可以用户同步writeFile版本:fs.writeFileSync()
,也可以将process.exit();
放在回调中:
fs.writeFile('res.txt', textContent, (err) => {
if (err) throw err;
process.exit();
});
答案 1 :(得分:0)
将您的fs.writeFile放到它自己的某个许诺函数中:
const writeFile = (path, data, opts = 'utf8') =>
new Promise((res, rej) => {
fs.writeFile(path, data, opts, (err) => {
if (err) rej(err)
else res()
})
});
然后在主要的genScraper异步函数中,您可以执行以下操作:
await writeFile('res,txt', textContent);
答案 2 :(得分:0)
以下函数将返回一个布尔结果,表示fs.writeFile
的成功:
build/lib
您可以使用以下方法在const write_file = ( file, data ) => new Promise( ( resolve, reject ) =>
{
fs.writeFile( file, data, 'utf8', error =>
{
if ( error )
{
console.error( error );
reject( false );
}
else
{
resolve( true );
}
});
});
函数中使用它:
genScraper()
如果这不起作用,则可能是您试图在其中写入数据的文件或目录的权限问题。
如果您正在运行Linux,则可能需要使用chown
来将文件或目录的所有者更改为当前用户。
或者,您可能想研究使用chmod
来更改与文件关联的权限,以允许当前用户具有写权限。