使用 selenium python 无法点击按钮

时间:2021-06-01 17:57:47

标签: python selenium selenium-webdriver selenium-chromedriver

我一直在尝试使用 selenium 单击按钮,但它一直说该元素不可交互,即使它在屏幕上可见并且我可以手动单击它。我已经尝试过 webdriverwait、隐式等待和许多其他解决方案,但似乎都不起作用。请任何人都可以提供解决方案。 我附上了按钮代码和我自己的代码。

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options 
browser = webdriver.Chrome('')
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-popup-blocking")
browser.implicitly_wait(10)
browser.get('https://www.aldi.co.uk/kirkton-house-high-back-desk-chair/p/709360437078000')
browser.maximize_window()
buybutton = False

while not buybutton:
    try:
        addToCartBtn = addButton = browser.find_element_by_class_name('disabled')
        print("Button isn't ready yet.")
        time.sleep(1)
        browser.refresh()
    except:
        time.sleep(2)
        addToCartBtn = addButton = browser.find_element_by_xpath('//*[@id="addToBasketButton"]')
        addToCartBtn.click()
        
     
        buybutton = True

<div class="product-details__selectButton" data-component="productAdder">
                <span class="js-sticky-atc__anchor"></span>
                <button class="product-details__cta js-product-cta button button--big button--rectangle button--transactional" type="submit" data-sku="709360437078000" data-limit="" data-limit-error="Sorry, you can only purchase 10 of this item." data-stock="inStock" data-stock-error="Out of stock" data-stock-pack-cta1="true" data-stock-pack-cta2="true" data-csrftoken="207d2b40-a785-40b6-89cd-987eba44a31c" data-is-buy-online="true" data-api="/api/cart/add" data-purchase-disabled="" aria-label="Add Kirkton House High Back Desk Chair to the basket" aria-controls="minicart-trigger" id="addToBasketButton">
                    <span class="js-product-cta-label" data-product-added="PRODUCT ADDED">
                        ADD TO BASKET</span>
                    <svg class="icon icon--basket">
                        <use xlink:href="/assets/8b290d70406f652780c7cc1c72fe4a88/dist/icons/sprite.symbol.svg#basket"></use>
                    </svg>
                </button>
            </div>

2 个答案:

答案 0 :(得分:0)

对于您使用的带有 IDxpathaddToBasketButton 有两个网络元素:

改用这个CSS_SELECTOR

ul.product-details__list.product-details__list--errors+form div.product-details__selectButton button

答案 1 :(得分:0)

试试这个 xpath:

driver.find_element_by_xpath(".//ul[contains(@class,'errors')]//following::form[contains(@class,'product-form')]//button[@id='addToBasketButton']").click()