我使用无浏览器检索网站上的一段信息并加载相应的文件:
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()
}但是,当我启动脚本时,文件读取指令就会立即执行,而不是等待web爬行完成。
在javascript中,我认为我需要使用回调函数来防止这种情况发生,但是是否有更好的方法来使用无浏览器呢?
发布于 2018-02-03 13:46:15
您可以尝试将implicitWait: true传递给Chromeless构造函数。默认情况下,此值为false。将其设置为true将使元素在执行命令之前等待存在。
换句话说,在分配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-01-13 20:54:59
我,您正在尝试在某个时间或事件上执行代码,那么回调是实现此操作的首选方法。但是JS是一种异步语言。老实说,我并不经常使用它,但似乎您可以只进行任何类型的异步调用,您就不会再被代码阻止了。只需从运行阻塞线的作业中分离出一个函数,它就应该在当前进程的旁边运行。可能添加一个sleep以确保它不会阻止您的其他代码运行。
https://stackoverflow.com/questions/48219238
复制相似问题