如何从使用javascript:href且导航不变URL的房产列表页提取房源唯一链接
解决方案
你访问的站点是典型的ASP.NET WebForms架构,__doPostBack是其内置的异步表单提交方法,点击房源后会先提交表单再跳转到详情页,所以初始页面静态资源和基础网络请求里不会直接暴露详情链接,可按以下步骤操作:
步骤1:提取所有房源唯一标识
打开Chrome开发者工具(F12)切换到Console标签,运行以下代码提取所有房源的ID:
const listingIds = []; document.querySelectorAll('a[href*="__doPostBack"]').forEach(a => { const hrefVal = a.getAttribute('href'); const idMatch = hrefVal.match(/Redisplay\|(\d+)/); if (idMatch?.[1]) listingIds.push(idMatch[1]); }); console.log('所有房源ID:', listingIds); // 如需直接复制到剪贴板,额外运行一行:copy(listingIds)
你示例里的第一条房源ID就是提取到的373。
步骤2:批量获取真实详情页链接
方法一:直接拼接(优先尝试)
先手动点击任意一个房源进入详情页,观察详情页URL结构,确认是否包含刚才提取的房源ID,如果存在对应关系,直接按URL规律批量拼接即可。
方法二:自动采集(无规律时使用)
如果URL没有明显拼接规律,运行以下脚本自动模拟点击、拦截跳转链接,不会实际打开大量标签页:
const realLinks = []; const originalOpen = window.open; // 拦截跳转事件收集链接 window.open = (url) => { realLinks.push(url); return null; }; const listingLinks = document.querySelectorAll('a[href*="__doPostBack"]'); // 间隔1秒点击一个房源,避免触发反爬限制 listingLinks.forEach((item, index) => { setTimeout(() => { item.click(); console.log(`已采集第${index + 1}条房源链接`); }, index * 1000); }); // 全部采集完成后输出结果 setTimeout(() => { window.open = originalOpen; console.log('所有真实房源链接:', realLinks); // 复制结果到剪贴板:copy(realLinks) }, listingLinks.length * 1000 + 500);
注意事项
- 点击间隔可根据页面加载速度调整,网速慢可以把1000改成2000(即2秒点击一次)
- 运行脚本前可先给站点开放弹窗权限,避免拦截跳转导致采集失败
- 如果脚本执行异常,刷新页面重新运行即可
内容的提问来源于stack exchange,提问作者jalil_BM
相关产品推荐
相关产品推荐

