Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 即使在IsLoading之后,页面源也会发生急剧变化,这是错误的_C#_Cefsharp - Fatal编程技术网

C# 即使在IsLoading之后,页面源也会发生急剧变化,这是错误的

C# 即使在IsLoading之后,页面源也会发生急剧变化,这是错误的,c#,cefsharp,C#,Cefsharp,我正在使用CefSharp加载一个Amazon产品页面,并在生成的源代码中查找一些元素。我遇到了一个问题,页面的来源似乎正在更改。这是我的密码: private IWebBrowser browser; public Form1() { InitializeComponent(); this.browser = new ChromiumWebBrowser("http://google.com"); this.Controls.Add(browser as Chrom

我正在使用CefSharp加载一个Amazon产品页面,并在生成的源代码中查找一些元素。我遇到了一个问题,页面的来源似乎正在更改。这是我的密码:

private IWebBrowser browser;

public Form1()
{
    InitializeComponent();

    this.browser = new ChromiumWebBrowser("http://google.com");
    this.Controls.Add(browser as ChromiumWebBrowser);

    browser.Load("https://www.amazon.com/dp/B004S8F7QM");
    while (browser.IsLoading)
    {
        Thread.Sleep(50);
    }
    string htmlSource = browser.GetSourceAsync().Result;

    // Look for elements in htmlSource
}
现在,当我在
htmlSource
中查找HTML元素时,我知道该元素出现在页面上,因为我使用普通浏览器查看了源代码,该元素的文本在
htmlSource
中不存在

但是,如果在
browser.IsLoading
之后添加足够长的延迟,则该HTML元素不会出现在我的源代码中

browser.Load("https://www.amazon.com/dp/B004S8F7QM");
while (browser.IsLoading)
{
    Thread.Sleep(50);
}
Thread.Sleep(1000);     // Additional delay
string htmlSource = browser.GetSourceAsync().Result;

造成这种情况的原因是什么?我如何判断页面何时完全完成加载,以便搜索HTML元素的源代码?

许多页面在加载页面后动态加载内容(资源已加载,DOM已准备就绪)。你所看到的是预期的。不太可能有一个一刀切的解决方案,因为完全加载的定义在不同的页面之间有所不同,有些页面从未停止加载内容。页面需要什么html元素才能被认为是加载的?@amaitland我担心会是这样。困难在于我的程序正在检查某个HTML元素是否存在,所以我不能等到该元素出现,因为它可能不在页面上。我想我会在那里保持2-3秒的延迟。或者,我可能会找到一个动态加载的元素,该元素将始终位于页面上,然后等待该元素加载,然后再检查我感兴趣的元素。感谢您的帮助。许多页面在页面加载后动态加载内容(资源已加载,DOM已准备就绪)。你所看到的是预期的。不太可能有一个一刀切的解决方案,因为完全加载的定义在不同的页面之间有所不同,有些页面从未停止加载内容。页面需要什么html元素才能被认为是加载的?@amaitland我担心会是这样。困难在于我的程序正在检查某个HTML元素是否存在,所以我不能等到该元素出现,因为它可能不在页面上。我想我会在那里保持2-3秒的延迟。或者,我可能会找到一个动态加载的元素,该元素将始终位于页面上,然后等待该元素加载,然后再检查我感兴趣的元素。谢谢你的帮助。