2011-02-23 61 views
0

相當長的問題;我怎樣才能得到一個網頁的其他網站上的標題?

我怎樣才能做到用C以下#:

打開一個網頁(最好是不可見) 檢查網頁是否重定向到不同的網頁(網站已關閉,404等) 檢查是否標題是不是等於說串

然後分開,(他們需要點擊確認按鈕)

打開他們的瀏覽器,並轉到第一的地址(這將是唯一的一個)的超鏈接在網站上。

我真的一直在尋找在谷歌的年齡,並沒有發現類似什麼我需要什麼。

無論你給我一個鏈接到一個網站上這方面的編程或實際源代碼的教程不有所作爲我。

回答

1

你可以使用WebRequest或HttpWebRequest,但是如果您需要瀏覽器UI,則需要使用WebBrowser控件:http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx

您將需要從Navigate調用中處理完成事件,該事件將爲您加載頁面:

WebBrowser myWebBrowser = new WebBrowser(); 

webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_IDontKnow); 
myWebBrowser.Navigate("http://myurl.com/mypage.htm"); 

然後,您可以實現您的處理程序如下,並與web瀏覽器的用戶界面需要互動...... DocumentText屬性包含目前載入網頁的HTML:

private void webBrowser1_IDontKnow(object sender, WebBrowserNavigatingEventArgs e) 

    { 

     CheckHTMLConfirmAndRedirect(webBrowser1.DocumentText); 

    } 
+1

看起來更簡單,更高效。我可以使它看不見,並進行測試,錯誤或使其可見,讓他們點擊超鏈接。老實說,不知道選擇哪個答案,他們都有優勢。 – 2011-02-23 23:04:30

+0

很高興你決定選擇我的建議!祝你好運! – vdoogs 2011-03-01 22:53:57

2

退房的webrequest class,它可以做重定向:)那麼你可以解析HTML和尋找使用XPath或東西

排序的標題標籤像這樣

using System.Xml; 
    using System.Xml.XPath; 
    using System.Xml.Linq; 
    using System.Net; 

    ... 

    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/"); 
    myReq.AllowAutoRedirect = true; 
    myReq.MaximumAutomaticRedirections = 5; 
    XNode result; 
    using(var responseStream = myReq.GetResponse().GetResponseStream()) { 
    result = XElement.Load(responseStream); 
    } 

    var title = result.XPathSelectElement("//title").Value; 

obviosly你,XPath可(也許應該)是更復雜的:)你可以找到更多關於XPath here

上類似的說明,你可以對XML使用XPath你回來找鏈接,並挑選出第一個:

var links = result.XPathSelectElements("//a").Select(linktag => linktag.Attribute("href").Value); 

當你最終找到你要打開的網址,你可以使用

System.Diagnostics.Process.Start(links.First()); 

讓它在瀏覽器中打開。這方面的一個好的方面是,它會打開瀏覽器是什麼都爲客戶端的默認。它確實有安全隱患,雖然,你應該確保它的網址,而不是一個exe文件什麼的。

也,其有可能是HTML中使用不同勢大寫字母的元素,你就必須尋找linsk

+0

謝謝,我會這樣做的。你可以發送$ _POST [] PHP變量嗎?如果是這樣,那麼我可以讓PHP做所有的工作:) – 2011-02-23 22:43:21

+0

我不知道很多關於PHP的恐懼,但你可以發送URL參數和標題,如果你喜歡。 webrequest類不會對結果進行任何類型的解析或處理,它只會給你一個原始的字節流,你可以通過它傳遞給XmlReader的東西。 – aL3891 2011-02-23 22:51:33

1

使用HttpWebRequest的時候處理那些和解析響應:

private static void method1() 
{ 
    string strWORD = "pain"; 
    const string WORDWEBURI = "http://www.wordwebonline.com/search.pl?w="; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WORDWEBURI + strWORD.ToUpper()); 
    request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; 
    request.ContentType = "text/html"; 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    StringBuilder sb = new StringBuilder(); 
    Stream resStream = response.GetResponseStream(); 

    byte[] buffer = new byte[8192]; 
    string tempString = null; 
    int count = 0; 

    do 
    { 
     // fill the buffer with data 
     count = resStream.Read(buffer, 0, buffer.Length); 

     // make sure we read some data 
     if (count != 0) 
     { 
      // translate from bytes to ASCII text 
      tempString = Encoding.UTF8.GetString(buffer, 0, count); 

      // continue building the string 
      sb.Append(tempString); 
     } 
    } 

    while (count > 0); // any more data to read? 

    Console.Write(sb.ToString()); 
} 
+0

哦,上帝比我想象的要多得多。感謝 – 2011-02-23 22:47:56

+0

這與使用WebClient.DownloadString()有什麼不同?除了能夠設置用戶代理和什麼。閱讀小冊子有什麼好處? – 2011-02-23 22:52:30

+0

Web服務器可能會重定向自動化的自動請求。設置useragent是獲得響應努力的一部分。 – ukhardy 2011-02-23 23:03:07

相關問題