繁体   English   中英

等待异步 function 与 selenium Nodejs

[英]await Async function with selenium Nodejs

当您使用 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!')
})();

当你运行它时,output 如下:-

 ...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

显然...Task Complete! 应在整个 function 完成后记录

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

由于您的.then(()=>...)不返回 Promise,因此开头的await关键字什么也不做。 Node 已经启动了获取 h3、获取其文本内容并记录它们的 Promise,但是您放错位置的await并没有告诉 Node 等待所有这些完成。 您需要await获取元素,然后同步循环遍历所有元素, await文本,然后同步打印文本,最后同步打印"...Task Complete!"

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

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

const search_query = 'tigers';

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

    const h3Elements = await driver.findElements(By.css('h3'));
    for (const h3 of h3Elements) {
        const text = await h3.getText();
        console.log(text);
    }

    console.log('...Task Complete!')
})();

如果你想减少额外的变量,你可以这样做:

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

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

const search_query = 'tigers';

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

    const h3Elements = await driver.findElements(By.css('h3'));
    for (const h3 of h3Elements) {
        console.log(await h3.getText());
    }

    console.log('...Task Complete!')
})();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM