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

Python爬虫无法爬取搜索后URL不变的站点,试了Selenium等方法无效求助

可行解决思路

1. 修复元素定位与交互前置逻辑

很多自定义搜索组件需要先点击激活才能识别输入内容,同时要确保定位到的是真正可交互的输入框,而非外层包裹的容器元素:

  • 替换等待逻辑,优先等待元素可交互,而非仅存在于DOM中:
from selenium.webdriver.support import expected_conditions as EC

search_element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "partnerfinder-search"))
)
# 先点击激活输入框
search_element.click()

2. 修正ActionChains使用逻辑

不要复用同一个ActionChains实例,累积的历史操作会导致执行异常,每次操作前重新初始化实例:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

# 每次执行前重新创建实例
action = ActionChains(driver)
action.move_to_element(search_element).send_keys(postal_code).send_keys(Keys.ENTER).perform()

3. 用JS注入强制触发输入与提交事件

部分站点不会监听回车操作,而是绑定了input、change自定义事件,直接用JS触发对应事件兼容性更强,也可以定位提交按钮点击替代回车操作:

# 直接给输入框赋值
driver.execute_script("arguments[0].value = arguments[1]", search_element, postal_code)
# 触发站点绑定的输入事件
driver.execute_script("arguments[0].dispatchEvent(new Event('input'))", search_element)
driver.execute_script("arguments[0].dispatchEvent(new Event('change'))", search_element)

# 优先点击提交按钮,比回车兼容性更好
submit_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".location-search__form button[type='submit']"))
)
submit_btn.click()

4. 直接抓取后端接口(最优方案)

该站点搜索后URL不变,说明是通过AJAX异步请求获取门店数据,完全可以跳过前端模拟操作,直接抓接口请求:

  • 打开浏览器F12开发者工具,切换到「网络」面板,筛选「XHR/提取」请求
  • 手动输入邮编触发搜索,找到返回门店数据的接口,直接用requests库构造请求获取数据,比Selenium模拟操作稳定性高、速度快。

内容的提问来源于stack exchange,提问作者Mohammad Usman Sajid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:27:00