我試圖在節點和webBrowser控件中使用phantomjs,cheerio在C#中獲取我的歌曲列表, 我可以成功獲取html,但沒有歌曲列表,不知道爲什麼我不能得到它...試圖讓網站上的歌曲列表不起作用
我可以做的唯一方法是通過開發工具複製HTML並通過Jquery進行分析。
這是我在winform代碼:
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://grooveshark.com/#!/shinningstar1001/collection");
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
File.WriteAllText("D://test.txt", webBrowser1.DocumentText);
}
在Cheerio:
var cheerio = require('cheerio');
var request = require('request');
var url = 'http://grooveshark.com/#!/shinningstar1001/collection';
request({
url: url,
headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
}, function (err, resp, body) {
$ = cheerio.load(body);
console.log(body);
})
我想這是因爲我不能讓阿賈克斯負荷後的完整的文檔?
但爲什麼webBrowser控制不能工作呢?我可以看到完整的內容被加載到控件中。 任何建議將真正感激。
我已經試過@Murray Foxcroft解決方案仍然不能得到我想要的確切的html:
其他問題
通過@Murray Foxcroft的解決方案,我可以得到8%列表內容,但爲什麼我無法獲得管道進入頁面的完整歌曲列表?例如,我可以得到列表中大約第40位的歌曲「Set me free」,但是歌曲列表中大約第70位的歌曲「This Love」無法播放。 (兩首歌肯定是在網站上)
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
return;
if (richTextBox1.Text.Length > 0) return;
var songList = webBrowser1.Document.GetElementById("profile-grid");
//try to get "This Love" that never step into the code:
if (songList != null && songList.InnerHtml.Contains("This Love")){...}
//"Set Me Free" is OK:
if (songList != null && songList.InnerHtml.Contains("Set Me Free"))
{
richTextBox1.Text = songList.OuterHtml;
}
我試過了,但它不起作用。 –
仍然不能得到正確的內容參考圖片:( –
但是,如果你使用chrome開發工具並瀏覽網站,你可以找到與Ctrl + F的ID和找到歌曲列表裏面,這就是我可以' –