我正在制作一个 wpf 应用程序,我需要它从生成的搜索结果中随机选择一个链接。我不知道该怎么做。这只是我被分配的一项智力练习。请帮助我快完成了。这是到目前为止的代码...我是 WPF 的 super 初学者。
namespace Search
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Btn_Click(object sender, RoutedEventArgs e)
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText(_textBox.Text);
browser.Button(Find.ByName("btnG")).Click();
browser.WaitForComplete(5000);
System.Windows.Forms.SendKeys.SendWait("{Enter}"); // presses search on the second screen
browser.Button(Find.ById("gbqfb")/*.ByName("btnG")*/).Click(); // doesn't work
}
}
}
}
最佳答案
这是一些指示性代码...
private void DownloadRandomLink(string searchTerm)
{
string fullUrl = "http://www.google.com/#q=" + searchTerm;
WebClient wc = new WebClient();
wc.DownloadFile(fullUrl, "file.htm");
Random rand = new Random();
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
var linksOnPage = from lnks in doc.DocumentNode.Descendants()
where lnks.Name == "a" &&
lnks.Attributes["href"] != null &&
lnks.InnerText.Trim().Length > 0
select new
{
Url = lnks.Attributes["href"].Value,
Text = lnks.InnerText
};
if (linksOnPage.Count() > 0)
{
int randomChoice = rand.Next(0, linksOnPage.Count()-1);
var link = linksOnPage.Skip(randomChoice).First();
// do something with link...
}
}
此代码采用搜索词并构建完整的 Google 网址。然后它将查询下载到本地文件中,并使用 HTML Agility Pack 打开该文件。
然后代码创建页面上所有链接的列表,并使用拼凑在一起的随机选择。
正如其他人所提到的,您需要获得 Google 的许可才能在他们的服务器上运行代码。不这样做会使您违反规定并可能产生尴尬的后果。
另外,这段代码是指示性的;它不是模范,甚至不是可构建。这是获得您所追求的目标所需步骤的粗略概念。
您之前的设计试图与 Google 索引页上的控件进行交互,而这种方法在一开始就太脆弱了。初学者很难对其进行测试。
HTML 敏捷包在这里 http://htmlagilitypack.codeplex.com/wikipage?title=Examples
关于c# - 从 C# 中生成的搜索结果中选择一个随机链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553741/