如何找到并点击按钮元素?

0 投票
2 回答
52 浏览
提问于 2025-04-11 22:04

我想要点击一个特定的颜色,然后再点击购买按钮。我能找到颜色并点击它们,但就是找不到购买的那个元素。我试过一些定位方法,比如XPATH、CSS_SELECTOR等等。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Edge() 
driver.maximize_window()
driver.get("https://www.digikala.com/product/dkp-4645665/")  

try:
    main_div = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "div.flex.lg\\:flex-wrap.overflow-x-auto.px-5.lg\\:px-0"))
    )
    
    child_elements = main_div.find_elements(By.CSS_SELECTOR, "div.bg-neutral-000.flex.items-center\
                                            .justify-center.cursor-pointer.ml-2.px-2.lg\\:px-0.styles_InfoSectionVariationColor__pX_3M") 
    specific_value = "سفید" 

    add_to_cart= WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "button[data-testid='add-to-cart']"))
    )
    for child in child_elements:
        time.sleep(1)
        if child.text == specific_value:
            add_to_cart.click()
            break

except Exception as e:
    print("Exception:", e)
finally:
    driver.quit()  

2 个回答

0

我觉得在遍历子元素的时候,specific_value 没有匹配上。因此你无法点击颜色。试着打印一下 child.text 的数据,手动确认一下这个特定的值。

另外一个解决办法是使用 child.get_attribute('innerText') 来获取子元素的文本数据。

0

我对你的代码进行了重写和简化。因为我猜想你可能想选择不同的颜色,所以我专门写了一个方法,可以根据 colorName 参数来选择颜色。

def select_color(colorName):
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, f"//div[./div[text()='{colorName}']]"))).click()

然后主脚本看起来是这样的

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

url = 'https://www.digikala.com/product/dkp-4645665'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)

colorName = "آبی کاربنی"

select_color(colorName)

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-testid='add-to-cart']"))).click()
# do other stuff

这个代码会选择你提供的颜色,并把这个商品添加到购物车里。

撰写回答