我正试图在twitter上获得关注者的数量。我成功地设法获得了许多粉丝:
String followers = driver.findElement(By.xpath("//div[@class='ProfileCanopy-navBar']//li[@class='ProfileNav-item ProfileNav-item--followers']//span[@class='ProfileNav-value']")).getText();
问题是答案不是确切的数字,“4.41M”。
HTML:
<a class="ProfileNav-stat ProfileNav-stat--link u-borderUserColor u-textCenter js-tooltip js-nav" data-nav="followers" tabindex="0" data-original-title="4,406,048 Followers">
<span class="ProfileNav-label">Followers</span>
<span class="ProfileNav-value" data-is-compact="true">4.41M</span>
</a>
我正在尝试获取数字“4,406,048”(在属性a的末尾)。我在网上看了大约一个小时,但找不到合适的解决方案。我正在使用Selenium与Java和Chrome。
答案 0 :(得分:2)
由于您引用了Selenium,因此您可以使用getAttribute()返回给定属性的值。在这种情况下,我们需要&#39; data-original-title&#39;。
的值driver.findElement(By.cssSelector("[data-nav='followers']")).getAttribute("data-original-title");
然后,由于这会返回比您想要的数据更多的数据(x关注者),因此您可以使用一些Java去除非数字:
replaceAll("[$A-Za-z , ]", "");
所以放在一起它看起来像这样:
String followers = driver.findElement(By.cssSelector("[data-nav='followers']"))
.getAttribute("data-original-title").replaceAll("[$A-Za-z , ]", "");
您使用的是getText(),它返回元素的内部文本。 GetAttribute()返回属性的值,在本例中为data-original-title。
以下是我用来确认它适用于您提供的HTML的代码。
public static void main(String[] args)
{
ChromeDriver driver = new ChromeDriver();
driver.get("file:///C:/Users/myId/Downloads/stack.html");
String followers = driver.findElement(By.cssSelector("[data-nav='followers']"))
.getAttribute("data-original-title").replaceAll("[$A-Za-z , ]", "");
System.out.println(followers);
}
答案 1 :(得分:1)
这是一个奇怪的。我编写了应该提取数字的代码,但它也继续返回null
。我终于弄清楚当我拉出元素然后写出outerHTML时发生了什么。页面加载期间正在更改元素。
WebDriver driver = new FirefoxDriver();
driver.get("https://twitter.com/blakeshelton");
WebDriverWait wait = new WebDriverWait(driver, 5);
WebElement e = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a[data-nav='followers']")));
System.out.println(e.getAttribute("outerHTML"));
System.out.println(e.getAttribute("title"));
如果您运行此代码,您将获得
<a class="ProfileNav-stat ProfileNav-stat--link u-borderUserColor u-textCenter js-tooltip js-openSignupDialog js-nonNavigable u-textUserColor" title="14,189,678 Followers" data-nav="followers" href="/blakeshelton/followers">
<span class="ProfileNav-label">Followers</span>
<span class="ProfileNav-value" data-is-compact="true">14.2M</span>
</a>
14,189,678 Followers
您会注意到outerHTML中的A
标记中title
包含关注者的数量。这就是我使用它而不是data-original-title
的原因。无论如何,这段代码已经过测试并且有效。
答案 2 :(得分:0)
您可以使用检查工具在chrome中测试它,然后测试您的xpath。
你应该这样做:
$x("//a[@data-nav='followers']/@data-original-title")
这让我
[data-original-title="1,880,556 Followers"]
从那里开始只用Java评估。