先上代码:
private void button_Click(object sender, EventArgs e)
{
CookieContainer cc = new CookieContainer();//this is for keep the Session and Cookie
Hashtable param = new Hashtable();//this is for keep post data.
string urlLogin = "http://demo.server//login.asp";
param.Add("User", "xxx");
param.Add("Password", "xxxx");
string result = PostAndGetHTML(urlLogin, cc, param);
string url2 = " http://demo.server/query.asp?id=1";// need change. special logic
param.Clear();
result = PostAndGetHTML(url2, cc, new Hashtable());
}
需求:客户的数据同时存在在另外一个不可控的系统中,需要和当前系统同步。
思路:自动登录另外一个系统,然后抓取数据,同步到本系统中。
技术点:模拟用户登录;保存登录状态;抓取数据
这样就自动找到id为usename 和password的控件并赋值。
点击按钮也有很多种方式,如果知道按钮的id或者name,例如id为:"submitbutton",直接用
[c-sharp] view plaincopy
HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"];
btnSubmit.InvokeMember("click");
如果不知道id和name,就用
[xhtml] view plaincopy
webBrowser1.Document.Forms[0].Invoke("submit");
这样获取了所有该网页所有按钮连接
文本查找要借助于TextRange对象的findText方法。但是,.Net里并没有这个对象。这是因为,.Net 2.0提供的HtmlDocument,HtmlWindow,HtmlElement等类,只不过是对原有mshtml这个COM组件的不完整封装,只提供了mshtml的部分功能。所以许多时候,我们仍旧要借助mshtml来实现我们需要的功能。好在这些.Net类都提供了DomDocument这个属性,使得我们很容易把.Net对象转换为COM对象使用。
|