You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium爬取网页文本时如何保留\t制表符格式

问题根源

Selenium 调用元素的.text属性时,返回的是浏览器渲染后的可见文本,浏览器排版引擎会自动将源码中的制表符\t、连续空白字符折叠为单个普通空格,这是拿不到原始制表符的核心原因,属于浏览器渲染规则导致的结果,和爬取流程逻辑无关。

修复方案

核心思路是跳过浏览器的可见文本渲染逻辑,直接读取DOM节点存储的原始文本内容,同时修复现有代码里的隐藏问题:

  • 所有获取目标文本的.text调用,统一替换为读取元素的textContent属性,该属性会保留节点内的原始空白字符(包括制表符、换行),不会做空白折叠处理。
  • 原代码while循环内的move_on == True是相等判断语句,不会修改变量值,会触发无限死循环,需要改为赋值语句move_on = True。
  • 原代码将driver.close()写在爬取函数内,单次调用后浏览器就会被关闭,后续重复调用函数会直接报错,建议把关闭驱动的逻辑移到函数外统一处理。
  • 旧版Selenium的find_element_by_*系列接口在新版本中已经被弃用,建议统一使用By类定位元素,同时在轮询元素的逻辑里加短等待,避免高频占用CPU。

修复后的可运行代码:

import selenium
from selenium.webdriver.common.by import By
import time

driver = selenium.webdriver.Chrome(executable_path=r"\chromedriver.exe")
   
def get_raw_input(link_input, website_input, driver): 
    driver.get(website_input)
    try:
        here_button = driver.find_element(By.XPATH, '/html/body/div[2]/h3/a')
        here_button.click()
        # 读取原始textContent保留制表符
        raw_data = driver.find_element(By.XPATH, '/html/body/pre').get_attribute('textContent')
    except:
        move_on = False
        while not move_on:
            try:
                # 同样读取原始textContent
                raw_data = driver.find_element(By.CLASS_NAME, 'output').get_attribute('textContent')
                move_on = True
            except:
                time.sleep(0.3)
    return raw_data

验证说明:用上述方式拿到的raw_data会完整保留原文本里的\t分隔符,直接调用.split("\t")即可正确拆分英文、法语对应内容,不会误拆分带空格的英文短语。

内容的提问来源于stack exchange,提问作者Max Davies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:39:18