gpt4 book ai didi

java - selenium 有没有稳定的方法来选择 1000+ 行

转载 作者:行者123 更新时间:2023-12-01 10:37:54 25 4
gpt4 key购买 nike

我在一页中有 1200 行的列表,我根据某些条件选择行。大多数情况下,我的条件发生了 1000 次,所以 selenium 试图一一选择 1000 行,但有时它选择 500,有时选择 800,有时选择 1000。有什么方法可以使其稳定吗?

当我检查我的条件时,它总是具有正确的大小来选择行。但 Selenium 不能始终以相同的方式工作。

代码:

        public static List<String> listOfData;
public static int x=0;

driver.get(URL);

WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(Xpath1)));


List<WebElement> TRcount = driver.findElements(By.tagName("tr"));

System.out.println(TRcount.size());
List<WebElement> TDcount = null;

if(TRcount.size()>0)
{
for(int i=2;i<TRcount.size();i++)
{


listOfData = new ArrayList<String>();
TDcount = TRcount.get(i).findElements(By.tagName("td"));

for(int j=0; j<TDcount.size(); j++)
{

if(TDcount.get(j).getText().equals("Loading..."))
{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

}


listOfData.add(TDcount.get(j).getText());

}
if(TDcount.size()>0)
{


if(GlobalMethods.checkIfDataExists((listOfData)))
{
listOfTrueId.add(i);
x++;
}
}


}

int count=2;
for(int k = 0; k <= listOfTrueId.size(); k++)
{

Thread.sleep(3000);
TRcount.get(count).click();
//System.out.println(TDcount.get(0).getText() +" : "+ "Pass");
//TDcount.get(0).click();
count++;


}



}

这里listOfTrueId是我的数组,只存储“否”。 id 来获取所有要选择的行。所以大多数时候我得到的大小接近 1000,这是正确的。

TRCount 始终正确。问题是当它检查数据存在条件并在 listOfTrueId

中执行++ 时

TRcount 也是列表元素,帮助我计算 TR 从 1 到

但是当它循环选择行时,它随时会停止。据我了解,我的浏览器一次显示 12 行,并且从下一个 Selenium 自动向下​​滚动,但随后它停止在任何行。

UPDATE :

我刚刚知道问题是 TD 标签数据加载,当开始加载数据时,它有名为 “正在加载...” 的文本,所以我的脚本得到这个 “正在加载” ...” 作为 TD 的值,并基于它选择更少的行。那么我如何告诉我的脚本,如果 TD 的值为“正在加载...”,那么等待一段时间并再次检查相同的 TD 以获取实际数据。

我在上面的脚本中放置了隐式等待,但这似乎没有帮助。

最佳答案

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 中,您实际上并没有进行任何等待,您只是设置驱动程序尝试执行的时间在 driver.findElement 中查找元素。

尝试改变

if(TDcount.get(j).getText().equals("Loading..."))
{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

其中之一:

  • 如果您有定位器

    //Explicit wait
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.invisibilityOfElementWithText(By locator, "Loading..."));
  • 如果所有元素中的文本更改为相同的文本

    //Explicit wait
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.textToBePresentInElement(TDcount.get(j), someText));
  • 或者只是在循环中等待

    long start = System.currentTimeMillis();
    while ((System.currentTimeMillis() - start) / 1000 < 30 && TDcount.get(j).getText().equals("Loading..."));

关于java - selenium 有没有稳定的方法来选择 1000+ 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34568407/

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