SeleniumWebDriver:如何使用Java脚本获取嵌入式图像数据?

SeleniumWebDriver:如何使用Java脚本获取嵌入式图像数据?,java,javascript,selenium,selenium-webdriver,Java,Javascript,Selenium,Selenium Webdriver,我必须从下面提到的html中获取src,请让我知道如何获取嵌入的图像数据?使用JS可以这样做吗?是否有任何方法显示隐藏元素?我将SeleniumWeb驱动程序与Java一起使用 <div id="sc859" class="atv4 alc sc-view c-image sc-hidden" style="left: 0px; right: 0px; top: 0px; bottom: 0px"> <img style="height: 100%; width: 10

我必须从下面提到的html中获取src,请让我知道如何获取嵌入的图像数据?使用JS可以这样做吗?是否有任何方法显示隐藏元素?我将SeleniumWeb驱动程序与Java一起使用

<div id="sc859" class="atv4 alc sc-view c-image sc-hidden" style="left: 0px; right: 0px; top: 0px; bottom: 0px">
    <img style="height: 100%; width: 100%;" src="data:image/gif;base64,R0lGODlhAQABAJAAAP///wAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw==" class="alc-img"/>
</div>
试试这个:

WebElement div = driver.findElement(By.id("sc859"));
String image =  div.findElement(By.className("alc-img")).getAttribute("src");

System.out.println(image);
使用document.getElementsById'sc859'[0].getAttribute'src';之前我总是直接执行脚本,如下所示。希望这是你想要的。而且,src不存在于div上,而存在于下面的img标记上,所以您的选择器是错误的

String src = (String) ((JavascriptExecutor)driver).executeScript("return document.querySelector(\"#sc859>img\").getAttribute(\"src\");");

System.out.println(src);
印刷品


无需使用JavaScript,您也可以将Francesco的答案缩短如下:

String src = driver.findElement(By.cssSelector("#sc859 > img.alc-img")).getAttribute("src");

有三件事你做错了-

1-getElementsById它的getElementById将只返回单个元素,而不是它的集合。据我所知,没有getElementsById方法

2-executeScript方法中缺少返回

3-没有附加到已传递id的div元素的src属性。src仅附加到img属性

最后,您的代码应该是:

String imgeJs = jse.executeScript("return document.getElementById('sc859').childNodes[1].getAttribute('src')").toString();
或者,您也可以通过以下方式实现:

WebElement element = driver.findElement(By.cssSelector("#sc859" > img.alc-img));
String imgeJs = jse.executeScript("return arguments[0].getAttribute('src')", element).toString();

或者按照剩下的答案,通过WebElement界面的element.getAttributesrc方法即可完成。你所说的隐藏属性是什么意思?你可以看到html吗?当我尝试获取src时,它总是显示null?JavascriptExecutor jse=JavascriptExecutor驱动程序;WebElement=driver.findElementBy.css选择器C859;String imgeJs=String jse.executeScriptdocument.getElementsById'sc859'[0].getAttribute'src';,要素这就是所谓的嵌入式图像数据,而不是隐藏的
String imgeJs = jse.executeScript("return document.getElementById('sc859').childNodes[1].getAttribute('src')").toString();
WebElement element = driver.findElement(By.cssSelector("#sc859" > img.alc-img));
String imgeJs = jse.executeScript("return arguments[0].getAttribute('src')", element).toString();