我正在尝试创建一个爬虫,并且由于数据未在页面源中显示,我只能使用Web驱动程序执行javascript并获取响应,然后进行数据分析。 简化脚本,像这样,使用Promise。
var res = ""
function f1() {
p = window.Promise
a = p.resolve(5).then(function(value) {
console.log(value)
res = value
return res
})
return a
}
console.log(f1()) // Promise object
console.log("result = ", res) // res is empty
我的程序是这样的,用c#编写:
public void GetParameters(string url)
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(url);
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
string script = readFile(@"C:\myscript.js", Encoding.UTF8).TrimEnd(); // The script is a bit long, so I save it to a local file.
var json = js.ExecuteScript(script);
Console.WriteLine("Get the return value");
Console.WriteLine(json);
driver.Close();
}
我想获取值,我知道then
总是返回Promise对象,所以我定义了一个变量,并希望将值存储到它。但似乎是,Promise是异步执行的,因此res总是为空。
好的,我正在编写一个爬虫,并使用Selenium从服务器获取响应(Selenium.webdriver可以打开Web浏览器,然后执行脚本),我需要得到结果,因为它将被另一个使用程序。所以,我不能只添加另一个。然后,只输出值。也许我可以保存到本地文件,然后阅读它,但我认为这是低效的。
任何人都可以提供帮助吗?
答案 0 :(得分:2)
当您尝试记录全局res
时,结果尚未计算。使用Promises时,您必须使用.then
异步获取结果,如下所示:
f1().then(res => console.log("result =", res));
答案 1 :(得分:2)
试试这个 你错误地使用了承诺。
f1().then(res => console.log('result=', res)).