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

如何用Python Selenium在JS网站输入搜索文本并抓取邮编数据

Python Selenium 动态站点邮编抓取实现方案

针对JS动态渲染导致静态爬取无法拿到完整数据的问题,直接通过Selenium模拟浏览器完整执行页面JS、完成交互操作即可实现需求,具体实现如下:

前置依赖安装

先安装需要的Python包,执行以下命令:

pip install selenium webdriver-manager

webdriver-manager会自动匹配当前系统安装的Chrome版本下载对应驱动,不需要手动下载配置chromedriver。

核心实现逻辑

  • 初始化带基础反检测配置的Chrome浏览器实例,支持无头模式后台运行
  • 访问目标搜索页,等待页面初始JS渲染完成后定位搜索输入框
  • 输入目标地址,提交搜索请求
  • 显式等待搜索结果加载完成,避免JS未渲染就提取元素导致报错
  • 定位结果中的Eircode字段提取文本
  • 将结果写入本地txt文件,操作完成后关闭浏览器释放资源

完整可运行代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 浏览器配置
options = webdriver.ChromeOptions()
# 无头模式,不需要弹出浏览器窗口,调试时可以注释掉这行看可视化操作过程
options.add_argument("--headless=new")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")

# 初始化驱动
driver = webdriver.Chrome(
    service=ChromeService(ChromeDriverManager().install()),
    options=options
)
# 设置最长10秒显式等待
wait = WebDriverWait(driver, 10)

if __name__ == "__main__":
    target_url = "https://eircode-finder.com/search/"
    search_address = "8 old bawn court tallaght dublin"
    save_path = "eircode_result.txt"

    try:
        # 打开目标页面
        driver.get(target_url)
        # 定位搜索框,输入地址
        search_input = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "input#address, input[name='address'], input[type='search']"))
        )
        search_input.clear()
        search_input.send_keys(search_address)
        # 提交搜索
        search_input.submit()

        # 等待邮编结果加载完成,提取内容
        eircode_ele = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".eircode, .postal-code, span[class*='result-eircode']"))
        )
        eircode = eircode_ele.text.strip()

        # 写入txt文件
        with open(save_path, "w", encoding="utf-8") as f:
            f.write(f"搜索地址:{search_address}\n对应Eircode:{eircode}\n")
        
        print(f"抓取完成,邮编{eircode}已保存到{save_path}")

    except Exception as e:
        print(f"运行出错:{str(e)},可打开浏览器调试工具检查元素选择器是否匹配当前页面结构")
    finally:
        # 无论成功失败都关闭浏览器
        driver.quit()

常见问题调整

  • 如果运行时报元素找不到的错误,先注释掉无头模式参数,肉眼确认页面加载流程,打开F12检查搜索框、邮编结果对应的实际CSS选择器,替换代码里的选择器即可
  • 不要用固定时长的time.sleep()做等待,显式等待会在元素加载完成后立刻执行下一步,效率更高也更稳定
  • 如果触发站点反爬,可以适当在搜索、提交步骤增加1-2秒的随机间隔,或者更换代理IP
  • 批量查询时注意控制请求频率,短时间大量请求容易被站点拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:24:31