如何使用硒从展开部分中提取元素

时间:2019-04-19 03:16:03

标签: selenium css-selectors webdriver java-stream webdriverwait

我正在学习如何使用硒从网页提取数据。我尝试从页面https://www.redfin.com/CA/Los-Angeles/1366-W-22nd-St-90007/home/6896268中提取的数据是日期,例如 2018年10月29日。所有日期都在html表格“ 1366 West 22nd St的物业历史”的第一列中。

但是,使用下面的代码,我只能从表中获取前三个日期

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

由于表格已折叠,我需要单击部分底部的链接查看所有财产历史记录链接以展开表格并查看该表格中的其他日期。无论如何,是否可以使用硒从表中获取所有日期,包括折叠行中的日期?

2 个答案:

答案 0 :(得分:0)

在获得这些日期之前,您必须单击“查看全部”链接。在列表扩展之前,它们根本不在DOM中。但是点击很容易:

driver.find_element(By.CLASS_NAME, 'bottomLink').click()

答案 1 :(得分:0)

website上单击文本为查看所有属性历史记录的元素以展开表格并从表格中提取日期,以诱导 WebDriverWait em>,然后使用 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]