0

WatInを使用してハイパーリンク(リンク先のURL)のリストを収集しようとしています。私は使ってみました:

            foreach (Link l in myIE.Links)
            {

                Links.Add(l.ToString());                    
            }


            string LinksCSV = string.Join(",", Links.ToArray());
            richTextBox2.Text = LinksCSV;

リッチテキストボックス内のすべてのハイパーリンクを一覧表示しようとしていますが、上記でハイパーリンク名が返されたため、「リンク」が何度も表示されました。

さらに、「webpage.php?id =」を含み、その後に一意の番号が付いたURL/リンクのみをリストする必要があります。「webpage.php?id =」を含むものだけでフィルタリングされたスクレイプされたURLを返すにはどうすればよいですか?

更新:これは、他のサイトを使用して機能する更新されたテストですが、必要なサイトでは機能しません。以下のコードは機能します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WatiN.Core;


namespace ScrapeTest
{
class Program
{
    [STAThread]
        static void Main(string[] args)
    {
        IE ie = new IE();

        ie.GoTo("http://www.freesound.org/browse/tags/organ/");

        foreach (var currLink in ie.Links)
        {
            if (currLink.Url.Contains("sounds"))
            {
                Console.WriteLine("contains Edit in the link Url" + currLink.Url);
            }
        }

        Console.ReadLine();

    }

}

}

コードは正しいようですが、特定のURLとの相互作用とハイパーリンクが問題のようです。私がフォローしているサイトとハイパーリンクには機密情報が含まれているため、省略されています。

自分のサイトのメインページhttp://website.comを使用するとスクリプトが実行されるため、http://website.com/data.php?search =%22%22&catに送信する一意のページに関して問題が発生しています。 = 0 URLに.phpが含まれている可能性がありますか?また、役立つ場合は、以下に示すようにURLがページに保存されます。

td class="alt2">
<a align="center" href="data.php?id=111111">EDIT</a>
/td>

更新と解決策:何らかの理由で、Url.Containsメソッドを使用しようとすると問題が発生するようです。私がやったことは、すべてのスクレイプされたURLをリストに保存し、必要に応じてリストを1行ずつテストして、必要なURLを返すことです。手伝ってくれてどうもありがとう。

4

2 に答える 2

1

コードmyIE.Linksにはが含まれていますLinkCollection。つまり、オブジェクトを反復処理するときに、Link必要なプロパティを指定する必要があります。この場合は、Url

-google.comにアクセスして、リンクアドレスをコンソールに書き込みます。

    ie.GoTo("http://www.google.com");

    System.Threading.Thread.Sleep(5000);   //<-- Added due to diagnose what might be a timing issue.

    foreach (var currLink in ie.Links)
    {
        if (currLink.Url.Contains("www.google.com"))
        {
            Console.WriteLine("contains www.google.com in the link Url" + currLink.Url);
        }
    }

WatiN 2.1、IE9、Win7でテスト済み。

于 2011-11-18T15:58:53.830 に答える
0

次のようにContains()を使用してそれを行うことができます

foreach (Link l in myIE.Links)    
{  
            if(l.ToString().Contains("webpage.php?id="))
                Links.Add(l.ToString());  
} 
于 2011-11-18T05:03:19.550 に答える