Selenium网络驱动程序:如何使用JavaScripts获取嵌入式图像数据

Selenium webdriver : How to get embedded image data using JavaScripts?

本文关键字:获取 嵌入式 图像 数据 JavaScripts 何使用 网络 驱动程序 Selenium      更新时间:2023-11-14

我必须从下面提到的html中获取src,请告诉我如何获取嵌入的图像数据?使用JS可以做到这一点吗?是否有任何方法可以向隐藏元素显示?我在Java中使用Selenium web驱动程序。

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

我的代码:

JavascriptExecutor jse = (JavascriptExecutor)driver; 
WebElement element = driver.findElement(By.cssSelector("#sc859")); 
String imgeJs = (String) jse.executeScript("document.getElementsById('sc859')[0].getAttribute('src');", element);
System.out.println(imgeJs);

试试这个:

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);

打印

data:image/gif;base64,R0lGODlhAQABAJAAAP///wAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw==

不需要使用JavaScript,也可以缩短Francesco的回答,如下所示:

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

你做错了三件事-

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

2-executeScript方法中缺少return

3-没有src属性附加到您已经传递了id的div元素。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.getAttribute("src")方法即可完成。