Получите текст из первого элемента в списке с определенным заголовком с помощью python/selenium

#python #selenium

Вопрос:

Есть список с 10 комментариями. У каждого комментария есть название. В заголовке есть один xpath, а в комментарии-другой.

Я хочу проверить, существует ли в списке заголовок «Еженедельный отчет», а затем получить текст из соответствующего комментария, например, заголовок 1 соответствует комментарию 1, заголовок 2 соответствует комментарию 2 и так далее. Как я могу это закодировать? Я застрял. Я успешно могу проверить, содержит ли список заголовок с еженедельным отчетом, но не знаю, как его использовать, чтобы получить соответствующий комментарий. Пожалуйста, помогите.

 xpathCommentTitleList = [xpathCommentTitle1, xpathCommentTitle2, xpathCommentTitle3, xpathCommentTitle4, xpathCommentTitle5, xpathCommentTitle6, xpathCommentTitle7, xpathCommentTitle8, xpathCommentTitle9, xpathCommentTitle10]
xpathCommentList = [xpathComment1, xpathComment2, xpathComment3, xpathComment4, xpathComment5, xpathComment6, xpathComment7, xpathComment8, xpathComment9, xpathComment10]
        
    patternForFindingWeekTitle = r"Weekly Report"
    
    for xpath in xpathCommentTitleList: # loop through elements
        element = WebDriverWait(driver, 40).until(EC.presence_of_all_elements_located((By.XPATH, xpath)))
        element = driver.find_element_by_xpath(xpath)
        match2 = re.search(patternForFindingWeekTitle, element.text) 
        if match2:
            break
        else :
            print("Could not find any week title")
 

Комментарии:

1. Пожалуйста, поделитесь html-кодом?

Ответ №1:

Вы можете сделать это следующим образом:
как только страница будет загружена, получите все заголовки комментариев и тела комментариев.
Допустим, локатор заголовка комментария есть comment_title , а локатор тела комментария есть comment body .

 titles = driver.find_elements_by_xpath(comment_title)
comments = driver.find_elements_by_xpath(comment_body)
for index, title in enumerate(titles, start=1):
    title_text = title.text
    if('Weekly Report' in title_text):
        return comments[index].text
    
 

Комментарии:

1. Я получаю AttributeError: 'str' object has no attribute 'text' , когда пытаюсь это сделать. Это потому, что иногда заголовок/комментарий «Еженедельный отчет» отсутствует на странице. Только у некоторых пользователей есть заголовок и комментарий» Еженедельный отчет».

2. Я так не думаю. Вы точно скопировали этот код? Кроме того, я предполагаю, что ошибка появляется для title_text = title.text строки. Да?