【问题标题】:How do I click on 2nd html element which is a duplicate of first element using selenium and python?如何单击第二个 html 元素,它是使用 selenium 和 python 的第一个元素的副本?
【发布时间】:2020-01-29 01:14:32
【问题描述】:

我想点击一个在整个网站上复制的元素(它是一个按钮),但我如何点击让我们说第二个按钮,而不是第一个。 这是我要点击的按钮的代码:

<a href="/us/en/outletus/laptops/thinkpad/thinkpad-x-series/ThinkPad-X280/p/20KFCTO1WW-PC0YQ4GF" class="button-called-out button-full facetedResults-cta">SHOP NOW</a>

但是,问题是有时如果商品没有库存,它可能会变灰,所以我不想点击它 结果,这是我所有的代码:

def mainclick(website):
    while True:
        time.sleep(1)
        price_saved = [i.text.replace('$', "").replace(',', '') for i in driver.find_elements_by_css_selector('[itemprop=youSave]')]
        print(price_saved)
        for g in range(len(price_saved)):
            a = g + 1
            if float(price_saved[g]) > 200:
                try:
                    driver.find_element_by_link_text("SHOP NOW")[a].click()
                    time.sleep(3)
                    try:
                        driver.find_element_by_id("addToCartButtonTop").click()
                        driver.execute_script("window.history.go(-1)")
                    except:
                        driver.execute_script("window.history.go(-1)")
                except:
                    print("couldn't click")
                    pass
            print(a)
        driver.find_element_by_link_text("Next Page").click()
    print("all pages done")
# starts time
start_time = time.time()
mainweb = "https://www.lenovo.com/us/en/outletus/laptops/c/LAPTOPS?q=%3Aprice-asc%3AfacetSys-Memory%3A16+GB%3AfacetSys-Processor%3AIntel%C2%AE+Core%E2%84%A2+i7%3AfacetSys-Processor%3AIntel%C2%AE+Core%E2%84%A2+i5%3AfacetSys-Memory%3A8+GB&uq=&text=#"
driver.get(mainweb)
mainclick(mainweb)

我尝试使用 [a] 单击某个选项,但它似乎不起作用。另外,shop now 按钮的href 可能会根据产品而有所不同。

【问题讨论】:

  • 这样做的目的是什么?

标签: python html selenium


【解决方案1】:

您可以使用.find_elements*收集元素。

elements = driver.find_elements_by_link_text('insert_value_here')
elements[0].click()

上面的例子点击第一个元素。

这个索引[0],替换成你想要的。

【讨论】:

    【解决方案2】:

    如果您确定每次都想点击第二个按钮 尝试使用下面的xpath,

    (//*[@class='button-called-out button-full facetedResults-cta'])[2]
    

    如果按钮数量不同(可能会显示为灰色) 尝试使用 findelements

    List button=driver.findElements(By.xpath("//*[@class='button-called-out button-full facetedResults-cta']"));
    
    button.size();
    

    将 button.size() 动态添加到 xpath 的 '2' 位置,您可以点击第二个/第一个非灰色按钮

    【讨论】:

      【解决方案3】:

      您可以将 XPath 与索引 a 一起使用:

      driver.find_element_by_xpath("(//a[.='SHOP NOW'])[{}]".format(a))
      

      请注意,第一个元素的索引为 1。

      【讨论】:

        猜你喜欢
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多