【问题标题】:Obtaining browser rendered HTML using Selenium and Java使用 Selenium 和 Java 获取浏览器呈现的 HTML
【发布时间】:2016-03-23 08:34:40
【问题描述】:

我需要通过以编程方式连接到我的 LinkedIn 帐户并抓取我的个人资料网页来获取我关注的团体和公司。我尝试使用 selenium 登录 LinkedIn 并获取我的个人资料网页的呈现 html。

但是在对应的<div>标签(<div id="groups-container">)中包含我关注的群组列表,我只看到了用于获取群组相关信息的JavaScript。是否有可能获得包含组列表的firebug提供的完全呈现的html。

【问题讨论】:

  • 可以得到页面的source code,是你要找的吗?
  • 我实际上想要渲染的 html 内容。例如,如果数据由脚本加载到特定的 div 中,我希望加载的数据在 div 内而不是脚本内容。
  • 当然有可能,你只需要一个支持良好JS的浏览器(所以htmlunit在这个问题上是没有问题的)。另一方面,linkedin 有一个可用于此类东西的 api。也许你想检查一下,如果它已经有你想要的。 developer.linkedin.com/docs您可能还想检查浏览器中的请求 - 直接请求总是比在 selenium 中处理时间问题更可靠。

标签: java selenium web-scraping linkedin


【解决方案1】:

以下 Selenium 代码帮助我获取了我所属的组的列表。如果您不想在屏幕上看到自动化(无头),可以考虑使用HTMLUnitDriver

WebDriver driver = new FirefoxDriver();
driver.get("https://www.linkedin.com");

// login
driver.findElement(By.id("login-email")).sendKeys("");
driver.findElement(By.id("login-password")).sendKeys("");
driver.findElement(By.name("submit")).click();
Thread.sleep(3000);

// navigate to Groups
Actions actions = new Actions(driver);
actions.moveToElement(driver.findElement(By.id("nav-link-interests"))).build().perform();
Thread.sleep(2000);
actions.moveToElement(driver.findElement(By.xpath("//ul[@id='interests-sub-nav']//a[contains(.,'Groups')]")))
            .click().build().perform();
Thread.sleep(10000);

// navigate to mygroups
driver.findElement(By.linkText("My Groups")).click();
Thread.sleep(10000);

// Get all groups I am part of
for (WebElement groupNameElement : driver.findElements(By.xpath(
            "//h3[contains(.,'GROUPS THAT I')][contains(.,'M IN')]/following-sibling::ul//a[@class='js-entity-name entity-name']"))) {
    System.out.println(groupNameElement.getText());
}

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2015-10-03
    • 2021-07-25
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多