如何使用 Selenium 抓取动态渲染的网页?

问题描述 投票:0回答:1

This是我正在尝试抓取的页面。我的目标是检查字符串“任何可用的池将出现在此处”。位于页面上。 我做了一些研究,发现该页面是由 html 中的脚本动态生成的,该脚本以类似字典的数据结构包含网站的所有内容。 我遇到的问题是,即使在加载页面并向下滚动之后,我使用 (

driver.getPageSource()
) 提取的页面源仍然不包含带有字符串 (
<p class="font-[300]">Any available Pool will appear here</p>
) 的 html 元素,搜索仅与脚本 JSON 中出现的字符串匹配一次。

我尝试过延迟

getPageSource()
功能,因为我认为页面渲染得不够快,但这并没有奏效。 我可以清楚地看到页面上的字符串,但在页面源代码中找不到它(除了脚本json),所以我很困惑。

编辑:我发现

getPageSource()
函数仅返回最后加载页面的源,而不是Javascript修改的页面(source)。看来我需要在获取其源代码之前以某种方式更新页面,但我不知道该怎么做。

编辑2:根据@NickSlash的建议,我尝试使用xpath与driver.wait()一起查找字符串

driver.wait(until.elementLocated(By.xpath("//p[text()='Any available Pool will appear here']")), 10000, "Not found", 500);

但是该字符串从未出现。

javascript html selenium-webdriver web-scraping
1个回答
0
投票

感谢@NickSlash,我找到了解决问题的方法。 使用浏览器中提供的 JavaScript 控制台中的

document.body.innerText;
命令会返回页面上显示的文本文档。 我可以通过我的 Selenium 脚本执行这个命令,如下所示。

doc = driver.executeScript('return document.body.innerText;');
if (doc.search("Any available Pool will appear here") === -1) {
    console.log("not found");
} else {
    console.log("found");
}

检查字符串是否存在,它就像一个魅力!

© www.soinside.com 2019 - 2024. All rights reserved.