Селен, чтобы найти точное значение и открыть блок - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть скребок, который ищет предмет по номеру модели. И в большинстве случаев это работает, однако иногда точное совпадение не является первым элементом, возвращаемым в сетке.

Я попытался найти на странице точное совпадение, добавив кавычки в строку поиска, но это ничего не изменило. Вот мой код, который работает, но он вернет данные для первого элемента в таблице результатов:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...