Выберите часть строки с помощью selenium

#selenium #web-scraping #selenium-chromedriver

Вопрос:

Я хочу выбрать часть названия веб-сайта.

введите описание изображения здесь

после проверки заголовка html-код веб-сайта выглядит следующим образом:

введите описание изображения здесь

и я хочу выбрать только часть «2014 Ram 1500». Для этого я написал следующий код:

 # car name
            try:
                temp = driver.find_element_by_xpath(
                    '//*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]/text()[2]').text
                data.append(temp)
            except:
                data.append('')
 

но я получаю только пустую строку(‘ ‘). Я использую selenium для автоматизации и копирования полного Xpath «2014 Ram 1500» в коде. Что я делаю не так? И как я могу выбрать только часть «2014 Ram 1500» из всего названия?

Ответ №1:

Текст находится в новой строке, вы можете разделить строку на основе n массива строк, из которого мы могли бы извлечь первый элемент.

 try:
    temp = driver.find_element_by_xpath('//*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]').text
    a = temp.split('n')[1]
    print(a)
    data.append(a)
except:
    data.append('')
 

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

1. не знаю, почему этот Xpath не работает. Мне пришлось использовать Xpath заголовка h1

2. У вас изначально было это //*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1]/text()[2] , и, увидев это в первый раз, я понял, что это неправильно, поэтому я дал вам это //*[@id="react"]/div/div/div[2]/div[5]/div[2]/div/h1[1] . Ну, я мог бы дать вам больше информации о локаторе, но нет, я не буду.

Ответ №2:

Я написал приведенный ниже код, и он действительно сработал. На этот раз я скопировал Xpath из заголовка h1 и преобразовал его в текст. Затем, используя нарезку, я получил именно то, что хотел. Хотя я не уверен, что это лучшая практика или нет:

 # car name
            try:
                temp = driver.find_element_by_xpath('/html/body/section/div/div/div[2]/div[5]/div[2]/div/h1[1]').text
                temp = temp.split()[1:-2]
                temp = " ".join(e for e in temp)
                data.append(temp)
            except:
                data.append('')