通过executeScript抓取文本的Webdriver不起作用

时间:2017-06-19 18:56:30

标签: javascript node.js selenium-webdriver webdriver selenium-chromedriver

我正在使用Selenium WebdriverJS作为node.js

文档说当使用executeScript();时,如果脚本有一个return语句,那么

  

对于HTML元素,该值将解析为WebElement

所以我试图使用这个方法来探索它是如何工作的,但是我无法从webElement中获取文本。

我尝试通过以下方式从google.com抓取文字:

使用webdriver API的正常方式:

var glink = '#gbw > div > div > div.gb_7d.gb_R.gb_hg.gb_9f > div:nth-child(1) > a';

find(glink).getText().then(function(t){
    console.log(t);
})

这是按预期工作的。但以下不能工作:

var gett = function(){
    return driver.executeScript("return document.querySelectorAll('#gbw > div > div > div.gb_7d.gb_R.gb_hg.gb_9f > div:nth-child(1) > a')").then(function(result){
        result.getText().then(function(txt){
            console.log(txt)
        })
    });
}

var gett2 = function(){
    return driver.executeScript("return document.querySelectorAll('#gbw > div > div > div.gb_7d.gb_R.gb_hg.gb_9f > div:nth-child(1) > a')").getText().then(function(txt){
        console.log(txt)
    })
};

var gett3 = function(){
    return driver.executeScript("return document.querySelectorAll('#gbw > div > div > div.gb_7d.gb_R.gb_hg.gb_9f > div:nth-child(1) > a')", function(result){
        return result.getText().then(function(t){
            console.log(t);
        });
    });
};

调用时这些都不起作用。前两个抛出TypeError: result.getText is not a function,而最后一个抛出没有错误,但没有任何反应,浏览器在调用driver.quit()时成功退出。

为什么不做这些工作?我怎样才能使用executeScript

获取一个webelemernt

1 个答案:

答案 0 :(得分:0)

我意识到这是一个老问题,但这可能有助于其他人。我最近和mocha一直在学习Selenium,并且在承诺的解决方面一直在努力。我相信在这种情况下你只需要再一步来返回你期望的值,主要问题是尝试在值的整个节点上调用getText(),而不是单个元素。在应用getText()之前,您必须首先迭代节点中的各个元素。试试这个,类似的东西对我有用。

clustered