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

Python Web Scraping:类名重复无ID及双向认证下的爬取问题

Web Scraping两类问题解决方案

问题1:双向认证页面Selenium访问被拦截,手动访问正常

问题原因

手动访问时使用的是日常浏览器实例,已经加载了本地存储的客户端证书、有效会话凭证,Selenium默认启动的是全新的无状态浏览器实例,没有携带对应认证凭证,因此会被双向认证规则拦截。

可行方案

  • 复用本地日常浏览器的用户配置文件:启动Selenium时指定本地浏览器的用户数据目录,直接加载已经完成认证的浏览器环境,注意启动前需要关闭所有正在运行的对应浏览器进程,避免配置文件被锁定。Chrome浏览器示例代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_opts = Options()
# 替换为本地Chrome用户数据实际路径,Windows默认路径为C:/Users/[你的用户名]/AppData/Local/Google/Chrome/User Data
chrome_opts.add_argument("--user-data-dir=你的本地浏览器用户数据路径")
driver = webdriver.Chrome(options=chrome_opts)
  • 单独加载客户端证书:如果不想复用完整浏览器配置,可以在启动参数中单独指定双向认证需要的客户端证书(pfx格式),Chrome可通过--client-certificate参数指定证书路径,Firefox可通过浏览器配置项指定绑定的客户端证书。
  • 注入有效会话Cookie:首次手动打开目标页面后,导出目标域名下的所有有效Cookie,Selenium启动后先访问目标域名的根路径,再通过add_cookie方法批量注入所有Cookie,刷新页面即可通过认证。

问题2:同class无唯一属性的表格定位

核心思路

不要依赖class、id这类元素属性,从内容特征、结构特征、相对位置三个维度做定位,完全可以区分高度相似的表格元素。

可行方案

  • 基于独有内容特征匹配:先确认目标表格中存在的、其他非目标表格绝对不会出现的固定文本(比如专属表头字段、固定标题文字),先抓取页面内所有同class的表格元素,遍历判断表格内是否包含该独有文本,匹配到的即为目标表格。示例代码:
from selenium.webdriver.common.by import By

# 先获取所有同class的表格
all_tables = driver.find_elements(By.CSS_SELECTOR, "table.公共class名")
target_table = None
# 替换为目标表格独有的标记文本,比如专属表头"交易记录"
unique_text_mark = "目标表格独有固定文本"
for table in all_tables:
    if unique_text_mark in table.text:
        target_table = table
        break
  • 基于锚点元素做相对定位:找到目标表格附近位置固定、可唯一识别的锚点元素(比如表格上方的专属标题、说明文字块),通过XPath轴定位获取锚点相邻的目标表格。比如目标表格上方有固定标题「数据明细」,可直接用XPath定位:
target_table = driver.find_element(By.XPATH, '//*[contains(text(),"数据明细")]/following::table[1]')
  • 基于结构差异区分:对比目标表格和非目标表格的结构差异,比如列数、行数、嵌套层级:
    • 若目标表格列数固定(比如8列),非目标表格列数不同,遍历表格时统计首行的td/th数量即可匹配
    • 若目标表格和非目标表格的父级容器层级不同,可通过DOM层级路径做定位,比如定位主内容区下的表格,排除侧边栏、弹窗内的非目标表格

内容的提问来源于stack exchange,提问作者Takin Karampour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:39:25