使用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}")
关键提示
- 定位元素的正确姿势:打开浏览器开发者工具(F12),找到目标文本所在的元素,复制它的CSS选择器或者类名,替换代码中的占位选择器(比如
div[class="your-title-class"])。 - 处理加载延迟:如果页面加载慢,元素没出来就报错,可以用等待机制确保元素加载完成:
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')) ) - 示例选择器说明:代码里的
a.g08t882.g08t884.g08t887.aoyz142.d3eu8q0.d3eu8qf._1igc8rlh是一个示例,实际要根据页面里的元素类名调整,确保能精准定位到包含目标文本的父元素。
内容的提问来源于stack exchange,提问作者vee2gee
相关产品推荐
相关产品推荐

