0

我正在尝试使用 WatIn 收集超链接列表(它链接到的 url)。我尝试使用:

            foreach (Link l in myIE.Links)
            {

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


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

我正在尝试列出我的richtextbox 中的所有超链接,但是上面返回了超链接名称,因此它一遍又一遍地显示“链接”。

此外,我只需要列出包含“webpage.php?id=”的网址/链接,然后在此之后有一个唯一的编号。如何返回仅由包含“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();

    }

}

}

该代码似乎是正确的,但是它与我的特定网址和超链接的交互似乎是问题所在。我所关注的网站和超链接包含敏感信息,因此省略了它们。

使用我的网站主页http://website.com脚本运行,所以它有关于我将其发送到http://website.com/data.php?search=%22%22&cat的唯一页面的问题=0 可能是因为网址中的 .php 吗?如果有帮助,URL 也会存储在页面上,如下所示。

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

更新和解决方案:由于某种原因,当我尝试使用 Url.Contains 方法时似乎会出现问题。我最终所做的是将每个抓取的 Url 存储到一个列表中,并根据需要逐行测试我的列表以返回所需的 Url。非常感谢你的帮助。

4

2 回答 2

1

在您的代码myIE.Links中是 a 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 回答