当前位置: 首页 > 知识库问答 >
问题:

如何在Amazon.com中添加4个畅销商品以添加到耳机购物车

鲁洋
2023-03-14

我被亚马逊的自动化所困扰。com公司

自动化步骤:

  1. 打开

我尝试过的代码:

public static void main(String[] args) {
    System.setProperty("webdriver.chrome.driver", "C:\\Users\\****\\Downloads\\chromedriver_win32\\chromedriver.exe");
    WebDriver driver =  new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("http://www.amazon.com");
    WebDriverWait wait = new WebDriverWait(driver, 20);
    WebElement searchBox = wait.until(ExpectedConditions.elementToBeClickable(By.id("twotabsearchtextbox")));
    searchBox.click();
    searchBox.sendKeys("Headphones"+Keys.ENTER);
    Actions action = new Actions(driver);
    List<WebElement> bestSellers = driver.findElements(By.xpath("//span[text()='Best Seller']/ancestor::div[@class='sg-row']/following-sibling::div[@class='sg-row']/child::div[1]"));
    for(int i=1;i<=bestSellers.size();i++) {
        action.moveToElement(wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Best Seller']/ancestor::div[@class='sg-row']/following-sibling::div[@class='sg-row']/child::div['"+i+"']")))).build().perform();
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Best Seller']/ancestor::div[@class='sg-row']/following-sibling::div[@class='sg-row']/child::div['"+i+"']"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("add-to-cart-button"))).click(); 
        //System.err.println(wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h2[contains(text(),'Added to Cart')]"))).getText());
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.uss-o-close-icon.uss-o-close-icon-medium"))).click();
        driver.navigate().back();
        driver.navigate().refresh();
        System.err.println("try to find next best seller item ");
    }

}

它正在为所有迭代添加第一个畅销商品。但是我想将所有4个最畅销的产品添加到购物车中。任何帮助都将不胜感激。

共有2个答案

夏嘉德
2023-03-14

似乎您的位置错误,增加了计数,您可以尝试以下操作:

action.moveToElement(wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//span[text()='Best Seller']/ancestor::div[@class='sg-row']/following-sibling::div[@class='sg-row']/child::div[1])[" +i +"]")))).build().perform();
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("(//span[text()='Best Seller']/ancestor::div[@class='sg-row']/following-sibling::div[@class='sg-row']/child::div[1])[" +i +"]"))).click();

和关闭按钮,您可以使用此定位器:

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[contains(@class,'uss-o-close-icon uss-o-close-icon-medium') or contains(@class,'a-link-normal close-button')]"))).click();

我看每个关闭按钮都没有相同的定位器,这里也有它的挑战。

饶高雅
2023-03-14

在下面的代码中,xpath用于获取所有没有赞助(重复)的畅销书项目。使用stream从畅销书元素中获取href属性。迭代畅销书导航到url,添加到购物车并等待成功消息:

import org.openqa.selenium.support.ui.ExpectedConditions;

//...

List<WebElement> bestSellers = driver.findElements(
        By.xpath("//span[text()='Best Seller']" +
                "/ancestor::div[@data-asin and not(.//span[.='Sponsored'])][1]" +
                "//span[@data-component-type='s-product-image']//a"));
List<String> bestSellersHrefs = bestSellers.stream()
        .map(element -> element.getAttribute("href")).collect(Collectors.toList());

bestSellersHrefs.forEach(href -> {
    driver.get(href);
    wait.until(elementToBeClickable(By.id("add-to-cart-button"))).click();
    boolean success = wait.until(or(
            visibilityOfElementLocated(By.className("success-message")),
            visibilityOfElementLocated(By.xpath("//div[@id='attachDisplayAddBaseAlert']//h4[normalize-space(.)='Added to Cart']")),
            visibilityOfElementLocated(By.xpath("//h1[normalize-space(.)='Added to Cart']"))
    ));
});
 类似资料:
  • 本文向大家介绍Android实现购物车添加商品特效,包括了Android实现购物车添加商品特效的使用技巧和注意事项,需要的朋友参考一下 一、引言 以前在饿了么上面订餐的时候,曾经看到过这么一个特效,就是将商品加入订单时,会有一个小球呈抛物线状落入购物车中,然后购物车中的数量会改变。具体的效果如下图。 效果很简单,就是一个抛物线的动画,那么我们应该用什么技术来实现呢?想了想,动画层是不个错的选择!下

  • 本文向大家介绍Android实现购物车添加商品动画,包括了Android实现购物车添加商品动画的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现购物车添加商品动画的具体代码,供大家参考,具体内容如下 实现需求: 在商品列表页面,从列表Item 添加商品的时候,需要一个动画,仿佛是是往购物车里添加商品。 实现思路: 获取起始点与终点的坐标,利用PathMeasure 绘

  • 我想在单个产品页面中向“添加到购物车”按钮显示产品价值(版本) 我找到了必须编辑的文件:woocommerce\templates\single-product\add-to-cart\external.php 但现在我的“添加到购物车”按钮上什么也没有显示

  • 本文向大家介绍Android实现添加商品到购物车动画效果,包括了Android实现添加商品到购物车动画效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android添加商品到购物车的具体代码,供大家参考,具体内容如下 实现需求 在商品列表页面中,从列表item添加商品时,实现一个动画,给人感觉像是在添加商品到购物车。 思路 1、获取各个动画执行对象的起点和终点的坐标,利用Path

  • 本文向大家介绍vue.js购物车添加商品组件的方法,包括了vue.js购物车添加商品组件的方法的使用技巧和注意事项,需要的朋友参考一下 现实向购物车添加商品组件 代码 对象中添加新的属性,如果更新此属性的值,是不会更新视图的 解决方法:使用$set可以触发更新视图,这样当count发生变化的时候,$set去触发更新视图 addCart(ele){ 总结 以上所述是小编给大家介绍的vue.js购物车

  • 我经营一家Woocommerce商店,该商店也提供免费产品(_常规价格=0)。客户必须选择数量并将其添加到购物车中,然后下订单才能收到产品。但这并不是Woocommerce的工作原理,它隐藏了所有价格为0的产品的“添加到购物车”链接。并且不会在购物车页面中显示它们。有没有解决这个问题的办法?非常感谢。