等待 javascript 在 C# 中加载页面
Wait for javascript to load page in c#
我需要抓取一些页面,问题是这些页面中的一些正在使用javascript来加载它们的部分上下文,而另一些则没有!并且没有公共标签或内容来确定上下文是否已加载!我也不能使用计时器或循环来等待并检查上下文是否已更改!目前我正在使用网络浏览器抓取并解析上下文。
我已经在使用以下代码来检查页面是否完全加载并检查页面内容是否已更改,但它无法正常工作。
while (wb.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
知道如何解决这个问题吗?谢谢
如果使用浏览器抓取有效,请尝试使用 PuppeteerSharp,这是 "Headless Chrome .NET API"。
您应该能够完全用 C# 完成同样的事情。
希望以下代码对您有所帮助
创建函数方法等待几秒
public void Wait(int sec)
{
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
if (sec == 0 || sec < 0) return;
timer1.Interval = sec * 1000;
timer1.Enabled = true;
timer1.Start();
timer1.Tick += (s, e) =>
{
timer1.Enabled = false;
timer1.Stop();
};
while (timer1.Enabled)
{
Application.DoEvents();
}
}
在DocumentCompleted
事件中写入如下代码。检查元素是否有值,如果为 null 则为 null 等待 2 秒并继续此过程 30 次,将近一分钟。如果未加载,则显示一条消息,如页面未加载
int cnt = 0;
HtmlElement htmlElement = WebBrowser1.Document.GetElementById("elementID")
do
{
Wait(2);
cnt++;
htmlElement = WebBrowser1.Document.GetElementById("elementID")
if (cnt > 30)
{
throw new Exception();
}
} while (htmlElement == null);
我需要抓取一些页面,问题是这些页面中的一些正在使用javascript来加载它们的部分上下文,而另一些则没有!并且没有公共标签或内容来确定上下文是否已加载!我也不能使用计时器或循环来等待并检查上下文是否已更改!目前我正在使用网络浏览器抓取并解析上下文。
我已经在使用以下代码来检查页面是否完全加载并检查页面内容是否已更改,但它无法正常工作。
while (wb.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
知道如何解决这个问题吗?谢谢
如果使用浏览器抓取有效,请尝试使用 PuppeteerSharp,这是 "Headless Chrome .NET API"。
您应该能够完全用 C# 完成同样的事情。
希望以下代码对您有所帮助
创建函数方法等待几秒
public void Wait(int sec)
{
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
if (sec == 0 || sec < 0) return;
timer1.Interval = sec * 1000;
timer1.Enabled = true;
timer1.Start();
timer1.Tick += (s, e) =>
{
timer1.Enabled = false;
timer1.Stop();
};
while (timer1.Enabled)
{
Application.DoEvents();
}
}
在DocumentCompleted
事件中写入如下代码。检查元素是否有值,如果为 null 则为 null 等待 2 秒并继续此过程 30 次,将近一分钟。如果未加载,则显示一条消息,如页面未加载
int cnt = 0;
HtmlElement htmlElement = WebBrowser1.Document.GetElementById("elementID")
do
{
Wait(2);
cnt++;
htmlElement = WebBrowser1.Document.GetElementById("elementID")
if (cnt > 30)
{
throw new Exception();
}
} while (htmlElement == null);