我使用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?
答案 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以确保它不会阻止其他代码运行。