6

我正在使用 Chromeless 检索网站上的一条信息并加载相应的文件:

async function run() {
  const chromeless = new Chromeless()

      const screenshot = await chromeless
        .goto('http://www.website.com')
         title = await chromeless.inputValue('input[name="title"]')

         var fs = require('fs');
         var data = fs.readFileSync(title,"utf8");
         ...
    await chromeless.end()
}

但是当我启动脚本时会立即执行文件读取指令,而不是等待网络爬取完成。

在 javascript 中,我认为我需要使用回调函数来防止这种情况发生,但是有没有更好的方法来使用 Chromeless 来做到这一点?

4

2 回答 2

3

您可以尝试传递implicitWait: trueChromeless构造函数。该值是false默认值。将此设置为true将使 Chromeless 在执行命令之前等待元素存在。

换句话说,在分配var fs = require('fs');之前不应该被执行 const title

async function run() {
  const chromeless = new Chromeless({implicitWait: true})
  const screenshot = await chromeless.goto('http://www.website.com')
  const title = await chromeless.inputValue('input[name="title"]')

  var fs = require('fs');
  var data = fs.readFileSync(title,"utf8");
  ...
  await chromeless.end()
}
于 2018-02-03T13:46:15.733 回答
0

如果您尝试提前某个时间或在某个事件时执行代码,那么回调是执行此操作的首选方式。但是 JS 是一种异步语言。老实说,我并没有太多使用它,但似乎您可以进行任何类型的异步调用,并且您不会再被代码阻止。只需从运行阻塞行的作业中中断一个函数,它应该在当前进程旁边运行。可能添加睡眠以确保它不会阻止您的其他代码运行。

于 2018-01-13T20:54:59.277 回答