抓取一网页的数据,但这个网页需要登录后才能获得页面数据

HELLO_JIM 2010-06-21 10:52:13
问题是这样,我需要抓取一网页的数据,但这个网页需要登录后才能获得页面数据

具体需求:
有一登录页面 a
输入用户名,密码后,登录进入的页面b ,在b页面有一个查询框,输入关键字后可以查到要的资料
现在我想要抓取输入关键字后查到的这个资料????


a页面HTML代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<HTML xmlns="http://www.w3.org/1999/xhtml" >
<HEAD>
<title></title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<style type="text/css">
.box { BORDER-RIGHT: #00000e 1px solid; BORDER-TOP: #00000e 1px solid; BORDER-LEFT: #00000e 1px solid; WIDTH: 95px; COLOR: black; BORDER-BOTTOM: #00000e 1px solid; FONT-FAMILY: "Verdana", "Arial", "Helvetica", "sans-serif"; HEIGHT: 18px }
</style>
</HEAD>
<body background="Images/bg.jpg" style="font-family:宋体; font-size:12px;">
<form name="Form1" method="post" action="Default.aspx" id="Form1" onsubmit="return CheckForm()">
<div>
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTM4NDEzMjcxOA9kFgICAQ9kFgQCAQ9kFgJmD2QWAmYPZBYCAgEPEGRkFgFmZAIDDxYCHgdWaXNpYmxlaGRku2Xu3swCz7Do+clUU0V1cnHylvQ=" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>


<script src="/Web/WebResource.axd?d=VL6BGXIlsSRn1JfExdojlQ2&t=633911728051406250" type="text/javascript"></script>


<script src="/Web/WebResource.axd?d=899UgtWKK1ld1MgTOEjycQ2&t=633911728051406250" type="text/javascript"></script>
<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCgK8trP/CAKJm9GxDwLnrY36DgL6/rDvCQLlpoTSDALC7/GkAwKQ6qicBQKl1bK4CQK1qbSRCwLCi9reAwJ38okiwmFdHJ81o5upMrWijfO/" />
</div>
<script language="javascript">
function CheckForm()
{
return true;
if(Form1.txtUsername.value == "")
{
alert("用户名不可为空!");
return false;
}
if(Form1.txtPassword.value == "")
{
alert("密码不可为空!");
return false;
}
return true;
}

function OnSubmit()
{
document.getElementById("Form1").action="http://localhost/webtest/default.aspx";
document.all.__VIEWSTATE.value = "/wEPDwULLTE3MjkyOTU5NTgPZBYCAgEPZBYCAgMPFgIeB1Zpc2libGVoZGRMic+N6noF8f8g3IIOTEa0lsUeBw==";
}

</script>
<TABLE height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
<TBODY>
<tr>
<td style="HEIGHT: 472px">

<table id="tableLogin" align="center" cellspacing="0" cellpadding="0" width="550" height="264" background="Images/main.jpg" border="1" bordercolor="#000099">
<tr>
<TD><DIV align="center">
<TABLE cellSpacing="0" cellPadding="2" width="100%" border="0">
<TBODY align="center">
<TR align="center">
<TD style="height: 35px">

</TD>
<TD width="150" style="height: 35px"></TD>

<TD width="78" style="height: 35px">
</TD>
</TR>
<TR align="center">
<TD style="height: 32px">
<p align="right">
系  统:
</p>
</TD>
<TD width="150">
<select name="ddlSystem" onchange="javascript:setTimeout('__doPostBack(\'ddlSystem\',\'\')', 0)" id="ddlSystem" style="width:152px;">
<option selected="selected" value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
<option value="E">E</option>

</select></TD>
<TD width="78" style="height: 32px">
</TD>
</TR>
<TR align="center">
<TD>
<p align="right">用户名:
</p>
</TD>
<TD width="150">
<input name="txtUsername" type="text" id="txtUsername" class="box" style="width:150px;" /></TD>
<TD width="78">
</TD>
</TR>
<TR>
<TD>
<p align="right">密  码:
</p>
</TD>
<TD width="150">
<input name="txtPassword" type="password" id="txtPassword" class="box" style="width:150px;" /></TD>
<TD width="78">
<input type="submit" name="btnSubmit" value="登录" id="btnSubmit" style="color:White;background-color:#8080FF;width:60px;" /></TD>
</TR>
</TBODY>
</TABLE>
</DIV>
</TD>
</tr>
</table>





</TD>
</TR>
</TBODY>
</TABLE>


<script type="text/javascript">
//<![CDATA[
WebForm_AutoFocus('txtUsername');//]]>
</script>
</form>
</body>
</HTML>






...全文
1202 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzp988 2010-06-26
  • 打赏
  • 举报
回复
如果里的登录按钮是个图片如:
<script src="/Web/WebResource.axd?d=VL6BGXIlsSRn1JfExdojlQ2&t=633911728051406250" type="text/javascript"></script>

事件是用javascript来处理的,而javascript是由<script src="/Web/WebResource.axd?d=VL6BGXIlsSRn1JfExdojlQ2&t=633911728051406250" type="text/javascript"></script>这样的脚本控件,该如何操作呢?

IHandler 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wj469288588 的回复:]
可以试试使用fiddler2工具,打开这个工具,运行你登录的页面,在工具中找到传递的参数 然后使用HttpWebRequest 模拟浏览器登录 和筛选查询
[/Quote]

也可以啊
HELLO_JIM 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ihandler 的回复:]
用到了WebBrowser控件
[/Quote]

如果不用WebBrowser,而是用网页HttpWebRequest POST获取
wj469288588 2010-06-21
  • 打赏
  • 举报
回复
可以试试使用fiddler2工具,打开这个工具,运行你登录的页面,在工具中找到传递的参数 然后使用HttpWebRequest 模拟浏览器登录 和筛选查询
IHandler 2010-06-21
  • 打赏
  • 举报
回复
用到了WebBrowser控件
IHandler 2010-06-21
  • 打赏
  • 举报
回复
先自动填表,然后获取查询网页的全部HTML代码
以前WinForm测试的自动填表单

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://www.126.com/");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//webBrowser完成页面加载:
if (webBrowser1.Url.ToString() == "http://www.126.com/") //submit后还会加载一次,而所加载的页面“注销”按钮的name也是submit,汗,所以这要判断下
{
HtmlDocument doc = webBrowser1.Document; //获取document对象
//HtmlElement btn = null;
//doc.GetElementById("iptUser").SetAttribute("value", "账号");
//doc.GetElementById("iptPwd").SetAttribute("value", "密码");
//doc.Forms["form"].InvokeMember("Submit");
foreach (HtmlElement em in doc.All) //轮循
{
string str = em.Name;
if ((str == "user") || (str == "password") || (str == "enter.x")) //减少处理
{
switch (str)
{
case "user": em.SetAttribute("value", "账号"); break; //赋用户名
case "password": em.SetAttribute("value", "密码"); break; //赋密码
//case "enter.x": btn = em; break; //获取submit按钮
case "enter.x": em.InvokeMember("click"); break;
default: break;
}
}
}
//btn.InvokeMember("click"); //触发submit事件
//doc.Forms["LoginForm"].InvokeMember("submit");
}
else //成功登陆后关闭
{
//this.Close();
}
}

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧