У меня есть скребок, который ищет предмет по номеру модели. И в большинстве случаев это работает, однако иногда точное совпадение не является первым элементом, возвращаемым в сетке.
Я попытался найти на странице точное совпадение, добавив кавычки в строку поиска, но это ничего не изменило. Вот мой код, который работает, но он вернет данные для первого элемента в таблице результатов:
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 pandas as pd
import xlrd
driver = webdriver.Chrome()
item_list = pd.read_excel("List.xlsx")
lookup_list = item_list["LOOKUP"].tolist()
data = pd.DataFrame()
for i in lookup_list:
base_url = f"https://www.homedepot.com/s/" + i +"?NCNI-5"
driver.get(base_url)
try:
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".plp-pod__image"))).click()
ScrModl = driver.find_element(By.CSS_SELECTOR,'.product_details.modelNo').get_attribute("textContent")
Dimensions_Type=[]
Dimention_Size=[]
DimentionModel=[]
ScrapedModel = []
elements=WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located((By.XPATH, "(//h4[text()='Dimensions']/following::div[contains(@class,'specs__table')])[1]/div")))
for ele in elements:
if "placeholder" not in ele.get_attribute("class"):
DimensionsType=ele.find_element_by_xpath(".//div[@class='col-6 specs__cell specs__cell--label']").get_attribute("textContent")
DimentionSize=ele.find_element_by_xpath(".//div[@class='col-6 specs__cell specs__cell--label']/following-sibling::div[1]").get_attribute("textContent")
Dimention_model = i
Dimensions_Type.append(DimensionsType)
Dimention_Size.append(DimentionSize)
ScrapedModel.append((ScrModl).strip())
df=pd.DataFrame({"DimentionsModel":Dimention_model,"DimensionType":Dimensions_Type,"DimensionSize":Dimention_Size,"ScrapedModelNumber":ScrapedModel})
data = data.append(df)
data.to_csv("test2.csv", sep=",")
print(data)
except: Exception
continue
А вот как выглядит HTML. Я искал режим # HUC48, и результаты поиска нашли его, но он является вторым элементом в сетке. Для некоторых других продуктов может быть 3-й или 4-й и т. Д. Элемент в Gird результата. Так что мой сценарий всегда щелкает первым, что мне нужно сделать, это найти правильный блок, который содержит номер модели, который я искал, а затем, если он найден, нажать на описание эфира или изображение этого элемента. есть идеи как это сделать? ![enter image description here](https://i.stack.imgur.com/OkTa4.png)