我正在尝试为自己构建一个应用程序,用于自动从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/");
}
}
}
答案 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>
,然后点击超链接。