javascript - 网页抓取 HTML,JavaScript 没有被执行,因此丢失了 HTML 片段。如何执行所有脚本标签来编辑 DOM?

标签 javascript python selenium iframe

我正在使用 Selenium 尝试获取嵌套在所有 iframe 标记中的 HTML 文档。我能够在 iframe 中获取 HTML,但我认为有些标签没有被执行,导致我无法获得我想要的所有源代码。有没有办法让 HTML 执行 javascript,然后在 javascript 运行后使用新的 HTML?

代码:

from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

browser = webdriver.Chrome('C:/Users/G/chromedriver.exe')

browser.get("http://www.reddit.com")

time.sleep(1)

innerHTML = browser.execute_script("return document.body.innerHTML")

time.sleep(1)

iframes = browser.find_elements_by_tag_name("iframe")

time.sleep(1)

for iframe in iframes:

    browser.switch_to_default_content()
    browser.switch_to_frame(iframe)

    source = browser.page_source    

    time.sleep(1)

    print(source)

最佳答案

如果我正确理解了您的问题,您正在尝试获取 innerHTML 嵌套在所有 <iframe> 标签,所以首先我们需要 switch_to_frame 首先和 Selenium 只能switch_to_frame 如果框架可见。为此,您可以使用以下代码块:

iframes = driver.find_elements_by_tag_name("iframe")
for iframe in iframes:
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("iframe"))
    print(driver.page_source)
    driver.switch_to_default_content()

关于javascript - 网页抓取 HTML,JavaScript 没有被执行,因此丢失了 HTML 片段。如何执行所有脚本标签来编辑 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254679/

相关文章:

javascript - 本地主机没有记录代码更改?

python - 使用 pip 升级最初通过 apt 安装的包

selenium - 需要从位于 Selenium 中另一个跨度内的事件跨度元素获取工具提示文本

selenium - 使用 Protractor 检查文件名是否下载了正确的文件

python - 如何在selenium中发送键盘快捷键SHIFT CONTROL c

javascript - React - Throttle/debounce spinner (loading message) - 如果请求快于 X 毫秒则不显示

javascript - d3 文本不随节点移动

javascript - 获取原始 HTML 并将其重新呈现为 HTML

python - SSLV3_ALERT_HANDSHAKE_FAILURE 与 SNI 在 Python 2.9.10 中使用 Tornado 4.2

Python 套接字错误 - recv() 函数