请教一下各位各位。
我现在想要获取到 “https://www.lexus.com.cn/models/es/spec” 这个网页完全运行后的html代码。我在web项目中用的是 WebBrowser 插件来获取html。
但是,在这周二的下午 雷克萨斯那边对页面进行了修改,我的代码已经抓不到数据,我也查了一下 可能是两个原因 ,1.WebBrowser 的内核原因(我用IE浏览器打开那个网站 会给提示报错 无法加载某个js )。2。WebBrowser内核版本太低
对于我猜想的两个原因,我找了几个解决方法.
1: 我创建了一个窗体程序来测试 把WebBrowser的 IE 内核改成 WebKit ,但是它打开的页面是空白,后面了解到WebKit已经停止了更新 所以有些页面会显示空白。
2.我也了解到了一些,有一种是需要对注册表进行操作,也尝试了一下,但是没成功。
想问一下,有没有别的办法能拿到那个页面完全的html代码,麻烦知道的各位指点一下,谢谢。 下面是我之前用的代码。
public void RunWithSingleThread(object url)
{
ParameterizedThreadStart ps = new ParameterizedThreadStart(GetWebContent);
t = new Thread(ps);
t.IsBackground = true;
//t.ApartmentState = ApartmentState.STA;
t.TrySetApartmentState(ApartmentState.STA);
t.Start(url);
}
private static void Delay(int Millisecond)
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
System.Windows.Forms.Application.DoEvents();
}
return;
}
public void GetWebContent(object Url)
{
WebBrowser wb = new WebBrowser();
wb.ScriptErrorsSuppressed = true;
string xmlStr = string.Empty;
wb.Navigate(Url.ToString());
while (true)
{
Delay(50);//延迟50毫秒
if (wb.ReadyState == WebBrowserReadyState.Complete)//判断文档是否加载完毕
{
if (!wb.IsBusy)
{
string htmlstr = wb.Document.Body.InnerHtml;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstr);
//*[@id="specdata"]/div/div[1]
var aList = doc.DocumentNode.SelectNodes("//*[@id=\"specdata\"]");
foreach (var tb in aList)
{
var tdList = tb.SelectNodes("tr//td");
var market = tb.InnerHtml;
var tex = tb.InnerText;
}
}
}
}
}
内容太多,建议看这一篇内容,尝试解决一下:
https://blog.csdn.net/ghevinn/article/details/8737980
如果解决不了,再回我,如果解决,记得采纳一下,谢谢。