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



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

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

  1. 以www.my.URL 打开URL

  2. 逐个打开所有20个链接并保存Names

但是,我注意到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方法。并重新填充hrefs。

像这样在最后一个"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"));
}

最新更新