Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用selenium Nodejs等待异步函数_Javascript_Node.js_Selenium_Selenium Webdriver - Fatal编程技术网

Javascript 使用selenium Nodejs等待异步函数

Javascript 使用selenium Nodejs等待异步函数,javascript,node.js,selenium,selenium-webdriver,Javascript,Node.js,Selenium,Selenium Webdriver,我正在创建一个小程序,当您使用selenium在google上搜索内容时,返回所有链接标题的名称 代码如下: const {Builder,By, Key, until} = require('selenium-webdriver'); driver = new Builder().forBrowser("firefox").build(); var search_query='tigers'; (async()=>{ await driver.get(`htt

我正在创建一个小程序,当您使用selenium在google上搜索内容时,返回所有链接标题的名称

代码如下:

const {Builder,By, Key, until} = require('selenium-webdriver');

driver = new Builder().forBrowser("firefox").build();

var search_query='tigers';

(async()=>{

await driver.get(`https://www.google.com/search?q=${search_query}`);

await driver.findElements(By.css('h3')).then((search_results)=>{ 
 for (var i = 0; i < search_results.length; i++)
  search_results[i].getText().then((text)=>{console.log(text);})
});

console.log('...Task Complete!')
})();
显然,
…任务完成了应在整个功能完成后记录

我不明白我做错了什么我使用了适当的
wait
关键字来保持代码的有序流动,是
then()
中的错误吗?

因为你的
。然后(()=>…)
没有返回承诺,开始时的
wait
关键字没有任何作用。Node已经开始承诺获取h3,获取它们的文本内容,并记录它们,但是您放错位置的
wait
并没有告诉Node等待所有这些完成。您需要
等待
获取元素,然后同步循环所有元素,
等待
读取文本,然后同步打印文本,最后同步打印
“…任务完成!”

const{Builder,By,Key,until}=require('selenium-webdriver');
const driver=new Builder().forBrowser(“firefox”).build();
const search_query='tigers';
(异步()=>{
等着司机(`https://www.google.com/search?q=${search\u query}`);
const h3Elements=wait driver.findElements(By.css('h3'));
用于(h3元素的常数h3){
const text=wait h3.getText();
console.log(文本);
}
console.log(“…任务完成!”)
})();
如果要减少额外变量,可以这样做:

const{Builder,By,Key,until}=require('selenium-webdriver');
const driver=new Builder().forBrowser(“firefox”).build();
const search_query='tigers';
(异步()=>{
等着司机(`https://www.google.com/search?q=${search\u query}`);
const h3Elements=wait driver.findElements(By.css('h3'));
用于(h3元素的常数h3){
log(等待h3.getText());
}
console.log(“…任务完成!”)
})();

您发送的第一个代码很有效,非常感谢!但是第二个简化变量one不起作用,它在
console.log(wait h3.getText())行的参数列表
之后显示
SyntaxError:missing)
可能问题在于当
(h3)=>
不是异步函数时,在控制台日志中使用
Wait
?@cakelover我已经更新了简化变量版本的解决方案,请现在检查它在编译期间没有显示任何错误,但它给出了与问题中所问相同的错误输出是的,因为这不是一个顶级的
等待
,它导致了问题。你可以通过
Promise.all
.map
解决这个问题,但这只会把事情搞得一团糟。我已经更新了第二部分,它只是删除了一个不必要的变量(
text
),因为它位于
wait
...Task Complete!
Tiger - Wikipedia
Top stories
Tigers (2014 film) - Wikipedia
Detroit Tigers (@tigers) · Twitter
Tiger | Species | WWF
Videos
Official Detroit Tigers Website | MLB.com
Tiger | WWF
Tiger - National Geographic Kids
Tiger guide: species facts, how they hunt and where to see in ...
Related searches
Images
Description