我正在使用 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/