如何找到并点击按钮元素?
我想要点击一个特定的颜色,然后再点击购买按钮。我能找到颜色并点击它们,但就是找不到购买的那个元素。我试过一些定位方法,比如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
这个代码会选择你提供的颜色,并把这个商品添加到购物车里。