如何使用Selenium在亚马逊的自动建议中“点击”某个建议?

3

我正在尝试自动化亚马逊网站上的自动完成建议。但与谷歌搜索选项不同,建议的xpath始终在变化。我发布的代码并不总是有效,因为有时所需建议的xpath/id/cssselector会发生变化(例如@id=\"issDiv8\"],有时它是“issDiv4”或“issDiv6”等等)。

enter image description here

WebElement searchTextField = driver.findElement(By.id("twotabsearchtextbox"));

searchTextField.sendKeys("turbo");

WebDriverWait wait = new WebDriverWait(driver, 20);

wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@id=\"issDiv8\"]")));
List<WebElement> autoSuggest = driver.findElements(By.xpath("//*[@id=\"issDiv8\"]"));


System.out.println("Auto Suggest List ::" + autoSuggest.size());
for (int i = 0; i < autoSuggest.size(); i++) {
    System.out.println(autoSuggest.get(i).getText());
    if (autoSuggest.get(i).getText().equals("turbotax")) {
        autoSuggest.get(i).click();
        System.out.println("Success");

        break;

欢迎来到Stack Overflow!请避免使用第三方服务来显示图片。如果需要添加图片,请在编辑时单击图片按钮,或复制图片并单击CTRL + V键,或以任何其他方式直接将其粘贴到帖子中。第三方图像服务可能会随时发生故障,并且可能留下死链接或URL可用于恶意目的。 - Zoe stands with Ukraine
1个回答

1
使用 WebdriverWait 来处理动态元素,并使用以下的 xpath
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@data-keyword='turbotax']")));
element.click()

我在购买东西时也有一个关于“数量”的几乎相同的问题。我应该开新主题还是可以在这里问? - Alex
@Alex:那应该是另一个问题。这是特定问题的解决方案,可以被未来的读者使用。如果您在单个帖子中提出多个问题,原始发布者可能会因看到此答案而感到困惑。谢谢。 - KunduK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接