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);
但是该字符串从未出现。
感谢@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");
}
检查字符串是否存在,它就像一个魅力!