您好,非常感谢您的帮助。 :)
以下是我尝试做的事情:
我在这个模式的网页上有一些链接:
/ HTML /体/格[4] / DIV / DIV /部分/ DIV [2] / DIV [3] / DIV /的 DIV 1 /格1 / DIV / DIV [2] / A
/ HTML /体/格[4] / DIV / DIV /部分/ DIV [2] / DIV [3] / DIV /的 DIV 1 / DIV [2] / DIV / DIV [2] / A
/ HTML /体/格[4] / DIV / DIV /部分/ DIV [2] / DIV [3] / DIV /的 DIV 1 / DIV [3] / DIV / DIV [2] / A
/ HTML /体/格[4] / DIV / DIV /部分/ DIV [2] / DIV [3] / DIV /的 DIV 1 /格[4] / DIV / DIV [2] / A
但是,我在同一网页中也有其他链接,它们的路径类似但不完全遵循相同的模式:
/ HTML /体/格[4] / DIV / DIV /部分/ DIV [2] / DIV [3]的 / DIV / DIV [3] / DIV / DIV {{3} } /格1 / DIV / DIV [2] / A
如何才能获得显示第一个模式后面的链接而忽略其他模式?
Ps:我使用的是Selenium Webdriver和Java,这是关于链接的html的更新问题
<div class="col-sm-6 half-tile">
<div class="outside-caro">
<div class="grey-overlay">
<div class="inside-caro" style="background-image:url(' https://resources/images/metabolism.jpg'")>
</div>
</div>
<div class="tile-content">
<h4 class="module title-long-card">Healthy Weight Loss</h4>
<p class="module line-clamp">This online eLearning programme is designed to help you make smart decisions when it comes to dieting and to be aware of the pitfalls.</p>
<a class="more-button" href="/application/res-courses/overview?id=23">Learn More<i style="font-size: 10px;padding-left: 5px; "class="fa fa-chevron-right" aria-hidden="true"></i></a>
</div>
</div>
</div>
再次感谢
答案 0 :(得分:1)
我不太关注你的描述中你真正希望的内容,但我可以做一些猜测。
快速回答是, 始终提供完整路径 。
但是有一些方法可以让事情变得更容易编码。有几种方法可以在页面上创建指针,并且只能查找超出该点的内容。最简单的是使用简单的字符串连接:
String pointer = "/html/body/div[4]/div/div/section/div[2]/div[3]/div/div[1]";
WebElement tag1 = driver.findElement(By.xpath(pointer + "/div[1]/div/div[2]/a"));
WebElement tag2 = driver.findElement(By.xpath(pointer + "/div[2]/div/div[2]/a"));
另一种方法是将指针声明为WebElement,然后将其用作所有未来findElements的基础:
WebElement pointer = driver.findElement(By.xpath("/html/body/div[4]/div/div/section/div[2]/div[3]/div/div[1]"));
WebElement tag1 = pointer.findElement(By.xpath("./div[1]/div/div[2]/a"));
WebElement tag2 = pointer.findElement(By.xpath("./div[2]/div/div[2]/a"));
请注意xpath开头的点,说“将此节点用作起点”。
现在,我认为你真的试图完成所有锚点的列表,而不是逐个选择它们。与中一样,“获取匹配一个模式但不是不同但相似模式的所有链接”。为此,您可以对上述两种方法中的任何一种进行变化。例如:
WebElement pointer = driver.findElement(By.xpath("/html/body/div[4]/div/div/section/div[2]/div[3]/div/div[1]"));
List<WebElement> tags = pointer.findElement(By.xpath("./div/div/div[2]/a"));
这会将匹配模式的所有链接拉入List。有几点需要注意:
div
,而不是div[1]
和div[2]
。因为这似乎是模式中唯一改变的东西。div[1]
是tags.get(0)
。答案 1 :(得分:0)
我有问题的解决方案,我希望它能帮到你。
您只需要为上面提到的所有4个链接标识单个父级。我觉得你可以使用这个定位器作为父节点/html/body/div[4]/div/div/section/div[2]/div[3]/div/div[1]/div[1]
。
请找我的代码..
System.setProperty("webdriver.chrome.driver","Drivers/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.abodeqa.com/2015/08/26/finding-child-elements-in-webdriver-using-findelements/");
Thread.sleep(3000);
WebElement parent = driver.findElement(By.xpath("//section[@class='secondary clearfix']"));
List<WebElement>childernNodes = parent.findElements(By.xpath("./aside//a"));
System.out.println("Total: "+childernNodes.size());
for(WebElement value: childernNodes){
System.out.println(value.getAttribute("href"));
}
答案 2 :(得分:0)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String input = in.nextLine();
System.out.println(input);
in.close();
}
}