python - 使用 selenium 和 BeautifulSoup 获取页面的可见内容

标签 python html selenium beautifulsoup

我想检索网页的所有可见内容。比如说this网页。我正在远程使用带有 selenium 的 headless Firefox 浏览器。

我正在使用的脚本如下所示

driver = webdriver.Remote('http://0.0.0.0:xxxx/wd/hub', desired_capabilities)
driver.get(url)
dom = BeautifulSoup(driver.page_source, parser)

f = dom.find('iframe', id='dsq-app1')
driver.switch_to_frame('dsq-app1')
s = driver.page_source
f.replace_with(BeautifulSoup(s, 'html.parser'))

with open('out.html', 'w') as fe:
    fe.write(dom.encode('utf-8'))

这应该加载页面,解析 dom,然后将 id 为 dsq-app1 的 iframe 替换为其可见内容。如果我通过 python 命令行一一执行这些命令,它会按预期工作。然后我可以看到包含所有可见内容的段落。相反,当我通过执行脚本或将所有这些代码片段粘贴到解释器中来一次执行所有这些命令时,它的行为会有所不同。段落丢失了,内容仍然以json格式存在,但这不是我想要的。

知道为什么会发生这种情况吗?也许与replace_with有关?

最佳答案

听起来当您的代码尝试访问 dom 元素时,它们尚未加载。

尝试wait让元素完全加载然后替换。

当您逐个命令运行它时,这对您有用,因为这样您就可以让驱动程序在执行更多命令之前加载所有元素。

关于python - 使用 selenium 和 BeautifulSoup 获取页面的可见内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849497/

相关文章:

html - 处理草图不适用于网络

javascript - 从手机上传的图像方向不正确

javascript - 单击按钮时切换 div 标签

java - 如何使用selenium获取标题标签内的 anchor 标签值和href值

python - 如何在 for 循环迭代器中捕获异常

python - 在 Python 中使用 beautifulsoup 从多个 HTML 类中抓取 Web 数据的困难

python - if语句只执行else block

python - 删除未级联到sqlalchemy中的表

java - 无法运行 testng.xml SELENIUM

java - 如何处理不同环境下的不同用户