问题描述
我们使用 selenium 去打开一个页面,由于页面中使用了 frame 元素,只能获取部分内容,不能获取 frame 中的任何内容的问题。
解决方法
这里需要切换到 frame 获取内容,然后再把默认页面的内容拼接为一个完成的网页。下面是实现的代码。
from selenium import webdriveroption = FirefoxOptions()
driver = webdriver.Firefox(executable_path=DRIVER_PATH, options=option)
# 打开页面
driver.get("https://tjj.sh.gov.cn/tjnj/nj22.htm?d1=2022tjnj/BZSM.html")
# 获取主页面源代码
main_page_source = driver.page_source
# 找到 frame 元素
frame_element = driver.find_element_by_xpath('//frame[@name="main"]') # 替换为实际的 frame ID 或其他定位方式
# 切换到 frame
driver.switch_to.frame(frame_element)
# 获取 frame 内容的源代码
frame_page_source = driver.page_source
# 切回主页面
driver.switch_to.default_content()
# 合并主页面和 frame 内容
complete_page_source = main_page_source.replace('</head>', f'<base href="{driver.current_url}"></head>') + frame_page_source
# 此时 complete_page_source 包含了整个页面的内容(包括 frame 内容)
print(complete_page_source)
# 关闭 WebDriver
driver.quit()