Chromeless - 在执行指令之前等待

时间:2018-01-12 03:42:27

标签: javascript callback automation chromeless

我使用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?

2 个答案:

答案 0 :(得分:3)

您可以尝试将implicitWait: true传递给Chromeless构造函数。默认情况下,此值为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()
}

答案 1 :(得分:0)

我试图提前一段时间或在事件发生时执行代码,然后回调是执行此操作的首选方式。 但JS是一种异步语言。老实说,我没有太多使用它,但似乎你可以做任何类型的异步调用,你不会被代码阻止。只需从运行阻塞线的作业中分出一个函数,它应该在当前进程旁边运行。可能会添加sleep以确保它不会阻止其他代码运行。