Как использовать селен для извлечения элементов из расширяемого раздела - PullRequest
0 голосов
/ 19 апреля 2019

Я учусь использовать селен для извлечения данных с веб-страниц .Данные, которые я пытаюсь извлечь со страницы https://www.redfin.com/CA/Los-Angeles/1366-W-22nd-St-90007/home/6896268 - это дата, например, 29 октября 2018 .Все даты находятся в первом столбце html-таблицы «История собственности для 1366 West 22nd St».

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

cell = driver.find_element(By.XPATH, '//table[@class="basic-table-2"]/tbody/tr[1]/td[1]')

Поскольку таблица свернута, мне нужно щелкнуть нижнюю ссылку раздела Просмотреть всю историю свойств ссылку, чтобы развернуть таблицу и увидетьостальные даты в этой таблице.Можно ли в любом случае использовать селен, чтобы все даты из таблицы включали даты в сложенных строках?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

На веб-сайте , чтобы щелкнуть элемент с текстом Просмотреть всю историю свойств , чтобы развернуть таблицу и извлечь даты из таблицы, которые необходимо вызвать WebDriverWait , а затем, используя Java8 * stream() и map(), вы можете использовать следующее решение:

  • Кодовый блок:

    driver.get("https://www.redfin.com/CA/Los-Angeles/1366-W-22nd-St-90007/home/6896268");
    ((JavascriptExecutor)driver).executeScript("return arguments[0].scrollIntoView(true);", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("section#property-history-scroll h2.h2"))));
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.bottomLink"))).click();
    List<String> myDates = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("section#property-history-scroll tbody tr.PropertyHistoryEventRow[id^='propertyHistory-']>td.date-col"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList());
    System.out.println(myDates);
    
  • Консольный выход:

    [Oct 29, 2018, Aug 24, 2018, Aug 24, 2018, Jul 24, 2018, Mar 18, 2018, Dec 31, 2015, Sep 11, 2015, Jul 10, 2015, May 22, 2015, May 20, 1988, Aug 10, 1979]
    
0 голосов
/ 19 апреля 2019

Вам нужно будет щелкнуть ссылку «Просмотреть все», прежде чем вы сможете получить эти даты. Их просто нет в DOM, пока список не будет расширен. Но щелкнуть легко:

driver.find_element(By.CLASS_NAME, 'bottomLink').click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...