比较两个列表的内容,Java,Selenium



我正在Java中创建简单的抓取器供我使用。总的来说,我想做的是:

  1. 从主页获取所有链接并检查它们是否是内部链接
  2. 将内部链接存储在列表中旧(它们暂时存储在设置为 避免重复的链接然后保存到列表(
  3. 从列表旧访问链接
  4. 从页面获取所有链接,再次将它们存储在集合中,然后在列表中新
  5. 返回第 3 步,但访问列表中的下一个链接(它只是一个 列表上的"for"循环,通过列表上的每个元素进行迭代旧(
  6. 当访问列表中的所有链接时,比较列表旧和列表新,每个 链接列表不在列表中的新内容将添加到列表温度。
  7. 来自 listTemp 和 List 的链接被添加到 internalLinks
  8. 清除"列表旧"和"列表新建",将列表临时内容添加到"列表
  9. "
  10. 返回第三步
  11. 程序结束,然后在第 6 步结束时 listTemp = null(如此简单 做。。。使用检查时,检查在 6 日结束时更改为 true 步骤列表温度 = 空(

那是我的代码

package com.amazon.tests;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class Grabber {
private WebDriver driver;
private List<String> internalLinks = new ArrayList<String>();
private Set<String> noDuplicates = new HashSet<>();
private List<WebElement> linksOnPage = new ArrayList<>();
private List<String> listOld = new ArrayList<>();
private List<String> listNew = new ArrayList<>();
private List<String> listTemp = new ArrayList<>();
@BeforeClass
public void setup() {
System.setProperty("webdriver.chrome.driver","C:/TEST/LIB/chromedriver.exe");
driver = new ChromeDriver();
}
@AfterClass
public void teardown() {
driver.close();
}
@Test
public void grabber()
{
String hrefvalue = null;
boolean check = false;

driver.get("https://www.redbullmobile.pl/");
linksOnPage = driver.findElements(By.tagName("a"));

for (int i = 0; i<linksOnPage.size(); i++)
{
hrefvalue = linksOnPage.get(i).getAttribute("href");
if(hrefvalue != null)
{
if(hrefvalue.contains("redbullmobile") && !hrefvalue.contains("facebook") && !hrefvalue.contains("redbullmobile.play.pl") && !hrefvalue.contains("redbullmobilecollect") && !hrefvalue.contains("fb.com") && !hrefvalue.contains(".pdf"))
{
noDuplicates.add(linksOnPage.get(i).getAttribute("href"));
}
}
}
listOld.addAll(noDuplicates);
hrefvalue = null;
linksOnPage.clear();
noDuplicates.clear();

do 
{
listTemp.clear();
for (int i = 0; i<listOld.size(); i++)
{
driver.get(listOld.get(i));
linksOnPage = driver.findElements(By.tagName("a"));
for (int i1 = 0; i1<linksOnPage.size(); i1++)
{
hrefvalue = linksOnPage.get(i1).getAttribute("href");
if(hrefvalue != null)
{
if(hrefvalue.contains("redbullmobile") && !hrefvalue.contains("facebook") && !hrefvalue.contains("redbullmobile.play.pl") && !hrefvalue.contains("redbullmobilecollect") && !hrefvalue.contains("fb.com") && !hrefvalue.contains(".pdf"))
{
noDuplicates.add(linksOnPage.get(i1).getAttribute("href"));
}
}
}
}
//When all links from listOld are visited compare listOld and listNew, every link listNew that's not on List is added to listTemp.
//Links from ListTemp and ListOld are added to ListFinal
internalLinks.addAll(listOld);
internalLinks.addAll(listTemp);
//listOld and listNew are cleared, listTemp content is added to listOld
listOld.clear();
listNew.clear();
listOld.addAll(listTemp);
//Go back to 3rd step
//Program end when at then end of 6th step listTemp = null (so simple do...while with check, check changes to true when at the end of 6th step listTemp = null)
if (listTemp.isEmpty())
{
check = true;
}
}while(check);
}
}

但是我对步骤6有问题。我真的不知道如何将listOld上的每个元素与listNew上的每个元素进行比较,然后添加与listTemp不匹配的元素。有人可以帮助我吗?

另外,我认为我可以缩短此代码(基本上可以通过在do...while开始之前向listOld添加https://www.redbullmobile.pl/来摆脱(do...while(开始之前的代码。我是对的还是我错过了什么?

如您所知,List 包含一个addAll方法,用于将列表的所有元素添加到第一个元素。

它还包含一个removeAll方法来执行相反的操作。

布尔值全部删除(集合 c(

从此列表中删除指定集合中包含的所有元素

相关内容

  • 没有找到相关文章

最新更新