gpt4 book ai didi

java - 如果分页存在,则使用 Selenium 解析链接

转载 作者:行者123 更新时间:2023-12-01 21:38:03 26 4
gpt4 key购买 nike

我已经修改了我的脚本,现在它运行顺利。

我所做的一切,感谢如此的支持。

  1. 打开网址为 www.my.url

  2. 依次打开所有 20 个链接并保存名称

但是,我注意到 www.my.url 有 20 页(分页)因此,当前的脚本方式仅适用于第一个分页我的代码在这里

public class GetAllLinks {

public static void main(String[] args) throws InterruptedException {

System.setProperty("webdriver.chrome.driver", "C://Dell//chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.reklama.lv/ru/manufacture/build-works/uslugi/table.html");
driver.manage().window().maximize();

//Get list of web-elements with tagName - a
driver.findElement(By.xpath("//em[@class='view1']")).click();
List<WebElement> demovar = driver.findElements(By.xpath("//*[@id=\"big_icon_view\"]/ul/li/p/a"));
System.out.println(demovar.size());

ArrayList<String> hrefs = new ArrayList<String>(); //List for storing all href values for 'a' tag
for (WebElement var : demovar) {
System.out.println(var.getText()); // used to get text present between the anchor tags
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
}

int i = 0;
for (String href : hrefs) {
driver.navigate().to(href);
boolean isPresent = driver.findElements(By.xpath("//h3[@id='NameTitle']")).size() > 0;
if (isPresent) {
String test = driver.findElement(By.xpath("//*[@id=\"NameLink\"]")).getText();
System.out.println(test);
} else {
System.out.println("No name found");
}
Thread.sleep(3000); // To check if the navigation is happening properly.
}
}
}

正如我之前提到的,它将解析第一页上可见的所有链接。但是,我还需要实现分页。

所以,我尝试在这里添加分页

for (WebElement var : demovar) {
System.out.println(var.getText()); // used to get text present between the anchor tags
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
}

并添加类似的内容

    if(driver.findElement(By.xpath("//paginationButton")).isDisplayed() {
driver.findElement(By.xpath("//paginationButton")).click();
System.out.println(var.getText()); // used to get text present between the anchor tags
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
} else {
System.outprintln("no more pagination button");
}

假设,在第二页上,脚本将检查其他 20 个链接,并一一打开它们。但是,不幸的是我失败了。

最佳答案

由于使用了分页,所以转到第2页后,需要再次使用findElements方法。并重新填写 href。

最后一个“for”循环结束后就像这样:

    demovar = driver.findElements(By.xpath("//*[@id=\"big_icon_view\"]/ul/li/p/a"));

hrefs.clear();
for (WebElement var : demovar) {
hrefs.add(var.getAttribute("href"));
}

关于java - 如果分页存在,则使用 Selenium 解析链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58798263/

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