How to click only selected product in selenium

Viewed 74

I'm practicing selenium and try to click to selected product but somehow it's not working. I'm pretty sure that I do messy with css selector. Please have a look and help me out. Thank you.

from selenium import webdriver
from time import sleep
 
driver = webdriver.Chrome('./chromedriver.exe')
driver.maximize_window()
driver.get('https://www.khepa.xyz/')
 
# Shop Page
driver.find_element_by_link_text('SHOP').click()
 
# Next Page
driver.find_element_by_css_selector('[class*="next"]').click()
 
# Select Product
# products = driver.find_elements_by_xpath('//*[@class="woocommerce-loop-product__title"]')
products = driver.find_elements_by_css_selector('[class*="status-publish"]')
for product in products:
    sunglasses = product.find_element_by_css_selector('a h2')
    if sunglasses == 'Sunglasses':
        sunglasses.click()
        break
 
 
sleep(5)
driver.close()
1 Answers

I'd suggest using webdriver waits but your main issue was if sunglasses.text == 'Sunglasses':.

# Select Product
# products = driver.find_elements_by_xpath('//*[@class="woocommerce-loop-product__title"]')
products = driver.find_elements_by_css_selector('[class*="status-publish"]')
for product in products:
    sunglasses = product.find_element_by_css_selector('a h2')
    if sunglasses.text == 'Sunglasses':
        sunglasses.click()
        break

Below is just suggested edits for future stability.

wait = WebDriverWait(driver, 3)
driver.get('https://www.khepa.xyz/')
 
# Shop Page
wait.until(EC.element_to_be_clickable((By.LINK_TEXT,"SHOP"))).click()
 
# Next Page
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"[class*='next']"))).click()

Now a simpler xpath would be

//a[./h2[.='Sunglasses']]

Which would be used simply as

try:
    driver.find_element_by_xpath("//a[./h2[.='Sunglasses']]").click()
except:
    print('No item')

Imports

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