Есть ли лучший способ получить текст из таблицы HTML с помощью селена?

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

Изображение стола

ссылка на сайт

Мой код:

      driver.find_element_by_xpath('/html/body/chrome/div/mat-sidenav-container/mat-sidenav-content/div/ng-component/entity-v2/page-layout/div/div/div/page-centered-layout[3]/div/div/div[1]/row-card[1]/profile-section/section-card/mat-card/div[2]/div/list-card/div/table/tbody/tr/td[2]/field-formatter/identifier-formatter/a/div/div')

И ниже вывод моего кода:

      NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/chrome/div/mat-sidenav-container/mat-sidenav-content/div/ng-component/entity-v2/page-layout/div/div/div/page-centered-layout[3]/div/div/div[1]/row-card[1]/profile-section/section-card/mat-card/div[2]/div/list-card/div/table/tbody/tr/td[2]/field-formatter/identifier-formatter/a/div/div"}

(Информация о сеансе: chrome = 89.0.4389.82).

Пожалуйста, как я могу это решить?

2 ответа

Чтобы получить значение из динамической таблицы, используйте WebDriverWait() и ждать visibility_of_all_elements_located() и после xpath.

      driver.get("https://www.crunchbase.com/organization/climeon/company_financials")
columnRecords=WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//h2[.='Funding Rounds']/following ::table[1]//tbody//tr//td")))

for col in columnRecords:
    print(col.text)

Вам необходимо импортировать библиотеки ниже

      from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

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

      table = driver.find_elements_by_xpath('/html/body/chrome/div/mat-sidenav-container/mat-sidenav-content/div/ng-component/entity-v2/page-layout/div/div/div/page-centered-layout[3]/div/div/div[1]/row-card[1]/profile-section/section-card/mat-card/div[2]/div/list-card/div/table/tbody/tr/td')
for x in range(1, len(table) + 1):
    # Here you have to find what number varies between items and 
    # use x instead of that number
    text = driver.find_element_by_xpath(f'/html/body/chrome/div/mat-sidenav-container/mat-sidenav-content/div/ng-component/entity-v2/page-layout/div/div/div/page-centered-layout[3]/div/div/div[1]/row-card[1]/profile-section/section-card/mat-card/div[2]/div/list-card/div/table/tbody/tr/td[{x}]/field-formatter/identifier-formatter/a/div/div').text 
    print(text)

Я использовал xpaths в вашем вопросе, но я не знаю, правы ли они, поэтому проверьте его и дайте мне знать

Другие вопросы по тегам