我正在尝试使用WatIn收集超链接列表(它链接到的网址)。我尝试使用:
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 =”的过滤网址?
更新: 这是一个使用其他网站但不是我要求的网站的更新测试。以下代码有效。
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? 如果有帮助,网址也会存储在页面上,如下所示。
td class="alt2">
<a align="center" href="data.php?id=111111">EDIT</a>
/td>
更新和解决方案:出于某种原因,当我尝试使用Url.Contains方法时,似乎会出现问题。我最终做的是将每个抓取的Url存储到一个列表中,并根据需要逐行测试我的列表以返回所需的Url。非常感谢你的帮助。
答案 0 :(得分:1)
myIE.Links
中的是LinkCollection
,这意味着当您遍历Link
个对象时,您需要指定所需的属性,在这种情况下它将是{{1} }
示例 - 访问google.com并将链接地址写入控制台。
Url
在WatiN 2.1,IE9,Win7上测试。
答案 1 :(得分:0)
您可以使用Contains()按以下方式执行此操作
foreach (Link l in myIE.Links)
{
if(l.ToString().Contains("webpage.php?id="))
Links.Add(l.ToString());
}