Вы хотите .text, а не href, а также условие ожидания для обновления страницы:
#dataLstSubCat a
Затем извлеките .text в цикле | понимание
items = [item.text for item in soup.select('#dataLstSubCat a')]
Вы можете сделать все с помощью селена - вам нужно условие ожидания, чтобы обеспечить наличие содержимого, и дополнительное условие ожидания, чтобы текст изменился после итерации 1. Я использую time.sleep, который неоптимален.
items = [item.text for item in WebDriverWait(driver,5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#dataLstSubCat a")))]
Дополнительный импорт:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Вероятно, вы могли бы сделать все это с запросами POST и начальным GET, так как похоже, что страница использует __doPostBack
(.aspx), где значение из раскрывающегося списка используется для возврата подэлементов.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time
driver = webdriver.Chrome() #'~/chromedriver.exe')
driver.get('http://www.asianpaintsppg.com/applications/protective_products.aspx')
lst_name = ['Acrylic Coatings','Glass Flake Coatings']
for i in lst_name:
driver.find_element_by_xpath("//select[@name='txtProduct']/option[text()="+"'"+str(i)+"'"+"]").click()
items = [item.text for item in WebDriverWait(driver,5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#dataLstSubCat a")))]
print(items)
time.sleep(2)