我知道有几个问题与这些类似。我想我已经完成了它们,但我找不到如何解决我的问题。
问题如下。我尝试使用Selenium驱动程序点击&https:/unsplash.com /'上的图标/按钮。将显示从单个网格更改为多个网格的网站。
图标的HTML标记如下:
<svg class="N1Ri-" version="1.1" viewBox="0 0 32 32"
width="32" height="32" aria-labelledby="icon-title-635
icon-desc-636" aria-hidden="false" data-reactid=".pm6nw1xm9s.4.0.0.3.0.0.0.0.1.0">
<path d="M0 2v10c0 1.106 0.896 2 2
2h10c1.104 0 2-0.894 2-2v-10c0-1.106-0.896-2-2-2h-10c-1.104 0-2
0.894-2 2zM2 18c-1.104 0-2 0.894-2 2v10c0 1.106
0.896 2 2 2h10c1.104 0 2-0.894 2-2v-10c0-1.106-0.896-2-2-2h-10zM20 18c-1.106 0-2
0.894-2 2v10c0 1.106 0.894 2 2 2h10c1.106 0 2-0.894 2-2v-10c0-1.106-0.
894-2-2-2h-10zM20 0c-1.106 0-2 0.894-2 2v10c0 1.106
0.894 2 2 2h10c1.106 0 2-0.894 2-2v-10c0-1.106-0.894-2-2-2h-10z"
data-reactid=".pm6nw1xm9s.4.0.0.3.0.0.0.0.1.0.1">
</path>
</svg>
我的java代码如下:
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","/home/ xxxx /Documents/Selenium/geckodriver");
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("https:/unsplash.com/");
//I've tried all of the following independently with the same result: 'Unable to locate element'
driver.findElement(By.className("N1Ri")).click();
driver.findElement(By.className("N1Ri-")).click();
driver.findElement(By.className("svg.Hd1sr")).click();
driver.findElement(By.xpath("//a[contains(@class,'N1Ri')]")).click();
driver.findElement(By.xpath("//*[@id='svg.Hd1sr']")).click();
}
正如您将在代码中看到的那样,我尝试了一系列选项(我尝试了许多其他组合)但总是得到相同的结果:无法找到元素
我也尝试过Senenium IDE,当叮当响图标/按钮时,来源显示:LOCATOR DETECTION FAILED
我猜测HTML代码上有一些内容可以防止轻松抓取页面。
我的问题有两个: - 在这种情况下我必须使用的代码是什么? - (最重要的是)如何找到在这种情况下使用的代码?
由于
答案 0 :(得分:1)
试试这个xpath
("//a[contains(@href,'multi')]/*[@class='Hd1sr']")
使用svg标记xpath失败。
或css
"a[href*='multi']>svg[class='Hd1sr']"
答案 1 :(得分:0)
尝试:
driver.findElement(By.cssSelector("svg.N1Ri-")).click();
由于某种原因,相当于此的xpath不起作用,我担心我不知道为什么。