Selenium点击页面span标签后无法获取movieTime文本问题求助
问题原因
- XPath表达式缺失内容提取逻辑
你注释了原本正确的场次提取路径,新写的路径只选中了ul节点,没有向下查找子节点li的文本内容,也没有调用extract()方法提取结果,最终拿到的只是空的选择器对象列表。 - 日期点击逻辑存在冲突
你一次性遍历点击了所有电影对应的次日日期<span>标签,但网页的交互逻辑是点击其他区域/其他电影的日期控件时,已经切换到次日的电影会自动恢复为当日日期,你统一获取页面源码时,只有最后一个被点击的电影处于次日日期状态,其余电影都是当日状态,自然拿不到次日场次。
修复方案
- 还原并修正次日场次的XPath表达式,补全文本提取逻辑:
# 取消原有注释的正确路径,补全提取方法 movieTime = secondHtmlNode.xpath('./div[@class="tickets_movie_time"]/div[@class="tickets_times"]/div[@class="tickets_date"]/div[3]/div/div[@class="tickets_date_csbox"]/div/ul/li/text()').extract()
- 调整日期点击与数据提取逻辑,逐个处理单部电影,避免点击失效:
# 原有当日数据提取逻辑不变 allMovies = self.driver.find_elements_by_xpath('//section[@class="tickets_movie_time_box"]') tomorrow_movie_list = [] for index, movie in enumerate(allMovies): # 找到当前电影对应的次日日期span tomorrowSpan = movie.find_element_by_xpath(f'.//span[text()="{tomorrow}"]') # 滚动到可见区域再点击 self.driver.execute_script("arguments[0].scrollIntoViewIfNeeded()", tomorrowSpan) tomorrowSpan.click() time.sleep(1) # 点击后立即提取当前电影的次日场次,避免后续点击导致当前电影日期回弹 movieCnName = movie.find_element_by_xpath('./div[@class="tickets_movie_time"]/div[@class="tickets_times"]/div[@class="tickets_times_t"]/div[@class="times_title"]').text movieEnName = movie.find_element_by_xpath('./div[@class="tickets_movie_time"]/div[@class="tickets_times"]/div[@class="tickets_times_t"]/div[@class="times_title_en"]').text movieTime = [i.text for i in movie.find_elements_by_xpath('./div[@class="tickets_movie_time"]/div[@class="tickets_times"]/div[@class="tickets_date"]/div[3]/div/div[@class="tickets_date_csbox"]/div/ul/li')] tomorrow_movie_list.append({ "cn_name": movieCnName, "en_name": movieEnName, "time": sorted(movieTime) })
- 可选优化:将固定
time.sleep替换为Selenium显式等待,等待场次节点加载完成后再提取数据,避免网络波动导致的空数据问题。
内容的提问来源于stack exchange,提问作者Morton
相关产品推荐
相关产品推荐

