Не удается найти элемент таблицы из элемента div в селене python - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь выбрать table значения из div элемента, используя selenium,

. Когда я проверяю элемент, я вижу, что элемент содержит table, но я не могу его найти при просмотре исходного кода (что происходит при попытке доступа через селен).

Во время проверки:

enter image description here

Ниже приведен код, который я пробовал,

totals = driver.find_element_by_id("totals")#gets the totals div element. Only one is there
labels=totals.find_elements_by_class_name("hasLabel")#should get the table rows, but it was empty
print(len(labels))#returned 0

Но он был пуст (как я видел в исходном коде). Мне нужно экспортировать эти значения в файл как часть автоматизации

Можно ли как-нибудь извлечь эти значения?

1 Ответ

0 голосов
/ 23 января 2020

Ваше наблюдение кажется почти идеальным. Согласно HTML в во время проверки снимка, которым вы поделились, выделен элемент с текстом Налоги .


В то время как в При просмотре исходного кода снимка, который вы извлекли с помощью Selenium , возможно, Page Source был извлечен даже до того, как дочерние элементы полностью отобразились в Дерево DOM :

source code

Следовательно, дочерние элементы в <div id='totals'></div> отсутствуют в источнике страницы .


Соответствующий HTML в текстовом формате помог бы построить канонический ответ. Однако, чтобы получить общее количество <tr> элементов, вам нужно вызвать WebDriverWait для visibility_of_all_elements_located(), и вы можете использовать любой из следующих Локаторных стратегий :

  • Использование XPATH:

    print(len(WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table/tbody//tr[@class='hasLabel'][./td[@class='label']]")))))
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...