Selenium Firefox驱动下载TXT文件时HTML转义符异常问题
问题描述
使用Selenium Firefox驱动下载包含HTML和XBRL标签的TXT文件时出现转义字符异常:在Chrome浏览器中查看网页,大于号和小于号正常显示为>和<,但通过Selenium导出的TXT文件里,这些符号变成了&gt;和&lt;(相当于被二次转义)。
- Chrome网页显示:TXT内容里的
<>被正确转义为>/< - Selenium下载的TXT文件:
>被再次转义成&gt;,<变成&lt;
原使用代码:
opts = FirefoxOptions() opts.add_argument("--headless") browser = webdriver.Firefox(options=opts) browser.get(txtURL) with open(downloadedTxtFileName, "w") as f: f.write(browser.page_source)
解决方法
问题根源是browser.page_source获取的是浏览器解析后的HTML源码,其中的转义字符被二次编码。以下两种方法可解决:
方法1:提取页面纯文本内容(适用于纯文本页面)
如果目标页面是纯TXT格式,直接提取页面的文本内容而非解析后的HTML源码:
from selenium.webdriver.common.by import By opts = FirefoxOptions() opts.add_argument("--headless") browser = webdriver.Firefox(options=opts) browser.get(txtURL) # 获取页面body标签内的纯文本内容 txt_content = browser.find_element(By.TAG_NAME, "body").text with open(downloadedTxtFileName, "w", encoding="utf-8") as f: f.write(txt_content)
方法2:直接发送HTTP请求下载原始文件(更可靠)
绕过浏览器解析环节,用HTTP请求直接获取原始文件内容,彻底避免浏览器的转义处理:
import requests # 发送GET请求获取原始TXT内容 response = requests.get(txtURL) response.encoding = response.apparent_encoding # 自动识别文件编码 with open(downloadedTxtFileName, "w", encoding=response.encoding) as f: f.write(response.text)
说明:browser.page_source返回的是Firefox渲染后的DOM结构,会对页面中的转义字符进行二次转义;而直接提取文本或用requests获取原始资源,能拿到未被额外处理的原始TXT内容,保证转义符号与网页显示一致。
内容的提问来源于stack exchange,提问作者lader4325
相关产品推荐
相关产品推荐

