如何将含WebForm_DoPostBackWithOptions的href值转换为真实URL?
如何将ASP.NET回发的JavaScript链接转为直接访问URL?
问题描述
我有如下带有特定href的锚标签:
<a id="bodyContent_gv_list_lbtn_personname_2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$bodyContent$gv_list$ctl04$lbtn_personname", "", true, "", "", false, true))"><span class="articleText">element</span></a>
我需要获取该href关联页面的直接链接。通常我会用Selenium驱动获取锚元素的get_attribute('href')值,但得到的是上述脚本。手动点击该元素时,浏览器URL不会变化,因此无法构造真实链接。有没有办法将这个JavaScript脚本转换为可直接访问目标页面的URL?
我尝试过手动构造URL,但点击链接后地址并未改变,网络面板中也没有可用的XHR或JS信息。
解决方案
这是ASP.NET WebForms的服务器端回发机制导致的,这类链接本质是触发表单Post请求,而非直接的Get跳转,所以不存在可直接访问的独立URL,以下是可行的处理方案:
直接用Selenium模拟点击获取内容
既然回发后内容会加载到当前页面(URL不变),直接用Selenium点击该元素,等待页面更新完成后,提取所需的页面内容即可,这是最省心的方式。模拟Post请求获取内容
若要脱离Selenium,可按以下步骤操作:- 打开浏览器开发者工具的「网络」面板,勾选「保留日志」;
- 点击目标链接,找到触发的Post请求(通常是向当前页面发送的);
- 复制该请求的URL、表单参数(包括
__VIEWSTATE、__EVENTVALIDATION、__EVENTTARGET等ASP.NET自动生成的字段); - 用
requests这类HTTP库,构造Post请求并传入参数,即可获取回发后的页面内容。
检查页面是否隐藏真实链接
部分ASP.NET页面会在源码中隐藏真实链接,可查看页面HTML中是否有包含目标地址的隐藏输入框、脚本变量等,从中提取直接URL。查看服务器端逻辑(若有权限)
如果能访问项目源码,找到该按钮对应的服务器端事件处理代码,查看是否有重定向或生成独立页面的逻辑,从中提取真实的访问地址。
内容的提问来源于stack exchange,提问作者Tareq Hamarneh
相关产品推荐
相关产品推荐

