Chromeless - 在执行指令之前等待

Chromeless - wait before executing instructions

我正在使用 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 来做到这一点?

如果您尝试提前某个时间或在发生事件时执行代码,那么回调是执行此操作的首选方式。 但是JS是一种异步语言。老实说,我用得不多,但看起来你可以进行任何类型的异步调用,而且你不会再被代码阻塞。只需从您的工作中分离出 运行 阻塞线的函数,它应该 运行 在当前进程旁边。可能添加一个 sleep 以确保它不会阻止您的其他代码 运行ning.

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

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

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()
}