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