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

Selenium爬取comicshoplocator输入邮编后无法获取门店名问题

问题根因

提交邮编搜索后,门店列表是前端通过AJAX异步请求接口后动态渲染的,原代码在按下回车触发搜索的瞬间就直接读取页面源码,此时搜索结果还未加载完成,DOM结构中还不存在<div class="LocationName">标签,因此无法匹配到任何内容。

修复方法

使用Selenium的显式等待逻辑,在触发搜索后先等待目标门店元素加载完成,再读取页面源码做解析,不要在提交搜索后立刻抓取页面内容。

修正后完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

browser = webdriver.Firefox(executable_path=r'C:\Geckodriver\Geckodriver.exe')
browser.get('https://www.comicshoplocator.com/StoreLocator')
# 输入邮编触发搜索
browser.find_element(By.NAME, 'query').send_keys('73533' + Keys.RETURN)

# 显式等待:最长等待10秒,直到页面加载出至少一个门店名称节点,再继续后续逻辑
WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "LocationName"))
)

html = browser.page_source
soup = BeautifulSoup(html, features="html.parser")
for tag in soup.find_all('div', class_="LocationName"):
    print(tag.text)

# 用完记得关闭浏览器
browser.quit()

注意事项

  • 不推荐使用time.sleep(固定秒数)的硬等待方式:硬等待无法适配不同网络速度的场景,等待时间短了会因为内容没加载完抓不到结果,等待时间长了会拖慢程序运行效率,显式等待会在检测到目标元素出现后立刻执行后续代码,稳定性和执行效率都更优。
  • 如果需要兼容无搜索结果的场景,可以给显式等待加try-except超时捕获,避免页面一直加载不出目标元素时程序直接抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:09:47