gpt4 book ai didi

javascript - Java selenium javascript 执行器返回空数组

转载 作者:行者123 更新时间:2023-12-02 10:39:11 25 4
gpt4 key购买 nike

我正在尝试运行我编写的 javascript 函数,以通过 xpath(要求)收集 HTML 网站的所有评论。
粘贴在浏览器中的函数,ofc。没有“return”声明,工作得很好。
但是当通过 selenium 'javascriptexecutor' 执行时,它会返回一个空数组。
我知道您必须将 javascript 语句放入“代码”+ 形式,但为了可读性,我将代码格式化如下。
我希望有人能帮助我:)

ChromeDriver driver = new ChromeDriver();
String url = "AprivateSamplePage";
driver.get(url);
JavascriptExecutor js = (JavascriptExecutor) driver;
String text = (String) js.executeScript("return nodes =[];
xPathResult=document.evaluate('//comment()',document,null,XPathResult.ANY_TYPE, null);
nodes =[];
node = xPathResult.iterateNext();
while (node) {nodes.push(node.textContent);
node = xPathResult.iterateNext();}nodes;").toString();
System.out.print(text);

输出如下所示:

Only local connections are allowed.
Okt 30, 2018 8:56:07 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFORMATION: Detected dialect: OSS
[]
Process finished with exit code 0

最佳答案

您仅执行脚本 js.executeScript("return Nodes =[];");。 return 语句之后,脚本的其余部分将被忽略。因此您会收到一个空数组。

关于 executeScript(String) javaDoc 文档,您的脚本代码被包装并作为匿名函数的主体执行,如下所示:

function f() {
return nodes = [];
xPathResult = document.evaluate('//comment()', document, null, XPathResult.ANY_TYPE, null);
nodes = [];
node = xPathResult.iterateNext();
while (node) {
nodes.push(node.textContent);
node = xPathResult.iterateNext();
}
nodes;
}();

如您所知,每个脚本语句都用“;”分隔。由于第一个语句是 return 语句,因此函数在此结束并返回空数组作为结果。

在浏览器控制台中,脚本按预期工作,因为它不会在 return 语句处停止,而是打印出 Finale 语句的 nodes; 值。

您应该将返回值从第一个语句移到最后一个语句:

xPathResult = document.evaluate('//comment()', document, null, XPathResult.ANY_TYPE, null);
nodes = [];
node = xPathResult.iterateNext();
while (node) {
nodes.push(node.textContent);
node = xPathResult.iterateNext();
}

return nodes;

关于javascript - Java selenium javascript 执行器返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53059901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com