visual studio c#webbrowser与超链接

时间:2015-07-29 10:30:39

标签: c# visual-studio-2010 hyperlink webbrowser-control

我正在尝试为自己构建一个应用程序,用于自动从youtube下载mp3。我正在使用网络浏览器导航到该网站,我正在关注codeproject的教程,但该项目是基于Visual Basic的,我不知道我是否正确转换了它或者是什么。我了解如何使用getelementbyID和invokemember单击站点内的按钮。无论如何,代码的前半部分工作,它将url放在应该去的地方,然后按下按钮,但是当弹出蓝色链接时,链接的html与按钮的不同,并且i& #39;我不知道如何通过代码点击超链接。我对c#很有信心,但是当谈到代码中的html和网络内容时,我不知道从哪里开始学习。抱歉过于复杂,这是我的代码。

namespace YoutubeMP3Tool
{
 public partial class Form1 : Form
 {
    public Form1()
    {
        InitializeComponent();
    }



    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text.StartsWith("https://www.youtube.com/watch?v="))
        {
            button2.Enabled = true;
        }
        else
        {
            button2.Enabled = false;
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {

        //following two lines work as intended
        webBrowser1.Document.GetElementById("youtube-url").SetAttribute("value", textBox1.Text);
        webBrowser1.Document.GetElementById("submit").InvokeMember("click");



        //trying to click the download link
        webBrowser1.Document.GetElementById("download").InvokeMember("click");

        button3.Enabled = true;

    }

    private void button3_Click(object sender, EventArgs e)
    {
        //this code crashes the project
        webBrowser1.Document.GetElementById("dl_link").InvokeMember("click");

        HtmlElement download_link = webBrowser1.Document.GetElementById("dl_link");
        HtmlElementCollection links = download_link.GetElementsByTagName("a");
        string link = links[0].GetAttribute("href");
        System.Diagnostics.Process.Start(link);
    }

    private void Form1_Load_1(object sender, EventArgs e)
    {
        webBrowser1.Navigate("http://www.youtube-mp3.org/");

    }


 }
}

2 个答案:

答案 0 :(得分:0)

WebClient将为您完成此操作。基于How to download a file from a website in C#

    private void button3_Click(object sender, EventArgs e)
    {

        if (saveFileDialog1.ShowDialog() == DialogResult.OK) { 
            webBrowser1.Document.GetElementById("dl_link").InvokeMember("click");

            HtmlElement download_link = webBrowser1.Document.GetElementById("dl_link");
            HtmlElementCollection links = download_link.GetElementsByTagName("a");
            Uri link = new Uri(links[0].GetAttribute("href"));
            WebClient Client = new WebClient();
            Client.DownloadFileAsync(link, saveFileDialog1.FileName);
        }
    }

应该适合你。您可能需要添加SaveFileDialog以允许用户选择将MP3保存到的位置(假设您方法中的其他代码有效,我没有对其进行测试)。使用DownloadFileAsync将阻止您的UI挂起。

答案 1 :(得分:0)

从您的屏幕截图更新中,该页面没有包含您正在寻找的ID的元素。您的代码正在寻找带有 id ='下载'

的元素

尝试

webBrowser1.Document.GetElementById("dl_link").InvokeMember("click");

我相信,这应该点击<div>,然后点击超链接。