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()
}
我正在使用 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()
}