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

使用Selenium抓取StartupBase网站子页面遇到问题求助

解决思路

核心问题

你点击子页面失败主要有三点原因:

  1. 使用了绝对路径的XPath,页面结构稍有变动就会定位失效
  2. 未做元素加载校验,容易出现元素未渲染完成就执行点击的报错
  3. 部分场景下元素可能被其他组件遮挡,普通点击操作无法触发

推荐修改方案

方案1:通过拼接href直接访问子页面(稳定性最高)

你已经通过BeautifulSoup拿到了子页面的相对路径,直接拼接域名即可访问,无需走点击逻辑,修改代码如下:

base_domain = "https://startupbase.com.br"
for container in containers:
    # 获取子页面相对路径
    child_path = container.find('a', href=True)['href']
    # 拼接完整访问地址
    child_url = base_domain + child_path
    # 直接访问子页面
    driver.get(child_url)
    time.sleep(3)
    
    # 此处编写子页面信息提取逻辑
    
    # 提取完成后返回列表页
    driver.back()
    time.sleep(2)

方案2:优化Selenium点击逻辑

如果必须使用点击操作,替换绝对XPath为相对选择器+显式等待+JS点击,首先导入依赖:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

修改循环内的点击逻辑:

# 显式等待当前页所有公司卡片加载完成
card_links = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.search-body__item a"))
)
for idx in range(len(card_links)):
    # 每次返回列表页后重新定位元素,避免元素过期报错
    target_link = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, f"div.search-body__item a:nth-child({idx+1})"))
    )
    # JS点击规避元素遮挡问题
    driver.execute_script("arguments[0].click();", target_link)
    time.sleep(3)
    
    # 此处编写子页面信息提取逻辑
    
    # 返回列表页
    driver.back()
    time.sleep(2)

其他优化建议

  • 尽量用显式等待替代time.sleep()硬等待,既能提升爬取效率也能减少加载异常
  • 单页公司提取完成后增加翻页判断,检测到下一页按钮可点击时加载下一页数据
  • 可适当增加请求间隔,避免触发反爬限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:09:02