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

使用Selenium提取动态网页指定文本失败,寻求解决方案

问题与解决方案:用Selenium提取动态渲染页面的目标文本

问题描述

我是编程新手,刚学完《Automate the Boring Stuff》,现在要从JS动态渲染的网页里提取「Click & Collect - Luxury Goods」和「Auckland Airport」这两段文本。因为页面是动态加载的,BS4没法处理,所以选了Selenium,但目前的代码只能提取span标签里的「Job Title」,拿不到目标文本和span后面的div组件,求解决办法。

现有代码

for jobs in testing:
    job_names = jobs.find_element(By.TAG_NAME, 'span')
    print(job_names.text)

解决方案

动态页面的元素定位核心是找到对应内容的准确CSS选择器,以下是调整后的代码思路和示例:

# 先定位包含目标内容的父级a标签集合
job_elements = browser.find_elements(By.CSS_SELECTOR, 'a.g08t882.g08t884.g08t887.aoyz142.d3eu8q0.d3eu8qf._1igc8rlh')
links = []

for job_element in job_elements:
    # 若需要收集链接,可保留这部分
    link = job_element.get_attribute("href")
    links.append(link)
    
    # 提取目标文本:需要根据实际页面结构替换选择器
    # 示例:假设「Click & Collect - Luxury Goods」在a标签下的某个div内
    target_title = job_element.find_element(By.CSS_SELECTOR, 'div[class="your-title-class"]').text
    # 「Auckland Airport」在同层级的另一个div内
    target_location = job_element.find_element(By.CSS_SELECTOR, 'div[class="your-location-class"]').text
    
    print(f"目标职位:{target_title},地点:{target_location}")

关键提示

  1. 定位元素的正确姿势:打开浏览器开发者工具(F12),找到目标文本所在的元素,复制它的CSS选择器或者类名,替换代码中的占位选择器(比如div[class="your-title-class"])。
  2. 处理加载延迟:如果页面加载慢,元素没出来就报错,可以用等待机制确保元素加载完成:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 最多等待10秒,直到目标元素出现
    job_elements = WebDriverWait(browser, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'a.g08t882.g08t884.g08t887.aoyz142.d3eu8q0.d3eu8qf._1igc8rlh'))
    )
    
  3. 示例选择器说明:代码里的a.g08t882.g08t884.g08t887.aoyz142.d3eu8q0.d3eu8qf._1igc8rlh是一个示例,实际要根据页面里的元素类名调整,确保能精准定位到包含目标文本的父元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:42:52