某东的商品价格是【通过一个类似函数的东西(是这样的吗?)】【即时得到的(是AJAX吗?)】,所以用HttpWebRequest得到的Html源码里没有价格:
比如说:
<div class="dt">京 东 价:</div>
<div class="dd">
<strong class="p-price" id="jd-price"></strong>但是等到网页加载完毕,通过【查看选中部分源代码】却可以得到价格:
比如说:就可以得到:
<div class="dt">京 东 价:</div>
<div class="dd">
<strong class="p-price" id="jd-price">¥2488.00</strong>这【2488.00】就是我梦寐以求的东西哦,球大神帮助。
因为我只精通了C++,C#和web就上周刚开始接触,所以解答的时候最好上源代码和注释,
或者说出相关技术文献链接,
50分,谢谢了!
比如说:
<div class="dt">京 东 价:</div>
<div class="dd">
<strong class="p-price" id="jd-price"></strong>但是等到网页加载完毕,通过【查看选中部分源代码】却可以得到价格:
比如说:就可以得到:
<div class="dt">京 东 价:</div>
<div class="dd">
<strong class="p-price" id="jd-price">¥2488.00</strong>这【2488.00】就是我梦寐以求的东西哦,球大神帮助。
因为我只精通了C++,C#和web就上周刚开始接触,所以解答的时候最好上源代码和注释,
或者说出相关技术文献链接,
50分,谢谢了!
{
WebBrowser wb = new WebBrowser();
wb.Navigate(url);
using (TextWriter tw = new StreamWriter(@"f:\Test.txt"))
tw.Write(wb.DocumentText);
}GetPriceT("http://item.jd.com/539349.html");
这可是一言难尽啊,楼主先要学会在网页中用JS获取网页的任意内容,然后在 C# 中放一个 WebBrowser ,获取 IHTMLDocument2 对象后,用类似的方法获取,只是全部改成 C# 了。
using System.Threading;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
wb.DocumentCompleted += wb_DocumentCompleted;
}
WebBrowser wb = new WebBrowser();
private void button1_Click(object sender, EventArgs e)
{
wb.Navigate(textBox1.Text);
} void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Action<object> act = delegate
{
Thread.Sleep(500);
Invoke(new Action(() =>
{
foreach (HtmlElement element in wb.Document.All)
{
if (element.Id == "jd-price")
{
listBox1.Items.Clear();
listBox1.Items.Add(element.InnerText);
}
}
}));
};
ThreadPool.QueueUserWorkItem(new WaitCallback(act));
}
}
}
谢谢了,50分给你了,
根据你代码我也编写出了我的测试代码,的确成功了,但是还有一些疑问,
都能解答的话再给你另外的50分可好?Q1.下面的代码能稍微注释一下吗,语法理解不能:
private void wb_getprice(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Action<object> act = delegate
{
Thread.Sleep(500);
Invoke(new Action(() =>
{
foreach (HtmlElement element in wb.Document.All)
{
if(element.Id == "jd-price")
//using (TextWriter tw = new StreamWriter(@"f:\Price.txt"))
//tw.Write(element.InnerText);
}
}));
};
ThreadPool.QueueUserWorkItem(new WaitCallback(act));
}
};Q2.问题是:这东西好烦啊,能用类似异常的东西干掉吗?
Action<object> act = delegate
{
Thread.Sleep(500); //使方法所处的线程挂起500毫秒(给webbrowser时间处理document)
//在窗口所处的线程执行委托
Invoke(new Action(() =>
{
//遍历webbrowser的文档的所有元素
foreach (HtmlElement element in wb.Document.All)
{
//如果元素名为"jd-price"就将其包含的文本加入列表框控件
if (element.Id == "jd-price")
{
listBox1.Items.Clear();
listBox1.Items.Add(element.InnerText);
}
}
}));
};
//从线程池中取出一条线程执行上面定义的方法
ThreadPool.QueueUserWorkItem(new WaitCallback(act));
脚本错误的问题参考:
http://www.cnblogs.com/Ihaveadream/archive/2008/04/25/1171349.html