Невозможно загрузить Dynami c WebTable Content Selenium в Python 3.6 - PullRequest
0 голосов
/ 09 апреля 2020

Надеюсь, у вас все хорошо.

У меня проблема с извлечением строк таблицы с сайта по селену. На веб-сайте отображается 50 строк, но когда я их проверяю, их только 8. Сначала я не понял, в чем была проблема, но после такой большой борьбы я нашел проблему, но, похоже, не могу найти решение.

Итак, таблица загружает контент, когда я фокусируюсь на нем. Когда я не фокусируюсь на других строках, html выглядит следующим образом: Div Elements Когда не сфокусировано

<div class="x-grid3-row x-grid3-row-alt" style="width:1355px;height:34px;"></div>

Но когда я go в эти строки, он загружается содержимое и выгрузить предыдущие строки.

Div Элементы при фокусировке

image

Как видите, теперь видны маркеры, указывающие на то, что теперь загружены все дочерние элементы, когда я пошел / сосредоточился на этих строках.

Я попробовал этот метод, но дал мне только те строки, которые сфокусированы:

tables = driver.find_elements_by_xpath("//div[contains(@class,'x-grid3-row')]//tr")
    print("Length: "+str(len(tables)))
    for i, table in enumerate(tables):
        data = [item.text for item in table.find_elements_by_xpath(".//*[self::td or self::th]")]

Кто-нибудь может мне помочь? Заранее спасибо

Отредактировано: Решение:

 tables = driver.find_elements_by_xpath("//div[contains(@class,'x-grid3-row')]")
    saved = []
    for table in tables:
        driver.execute_script("arguments[0].scrollIntoView();", table)
        data = [item.text for item in table.find_elements_by_xpath(".//*[self::td or self::th]")]
        print(data)
        saved.append(data)
        time.sleep(0.5)
    print(len(saved))

1 Ответ

0 голосов
/ 09 апреля 2020

Я бы предложил вызвать WebDriverWait () и дождаться visibility_of_all_elements_located ()

tables=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,"//table[@class='x-grid3-row-table']//tr")))
print("Length: "+str(len(tables)))
for i, table in enumerate(tables):
    data = [item.text for item in table.find_elements_by_xpath(".//*[self::td or self::th]")]

Добавить следующие библиотеки.

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

Примечание: Если вы получите тот же результат как и раньше, вам может понадобиться прокрутить элемент.

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