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