C#字符串比较不起作用

C#字符串比较不起作用,c#,C#,在我目前正在开发的应用程序中,我遇到了这个wierd问题 string searchText = "onMouseOver=\"CallList_onMouseOver(this);\" id=\""; List<int> searchOrders = AllIndexesOf(scraper.clientBrowser.DocumentText, searchText); StringBuilder sb = new StringBuilder(); for (int i = 0

在我目前正在开发的应用程序中,我遇到了这个wierd问题

string searchText = "onMouseOver=\"CallList_onMouseOver(this);\" id=\"";
List<int> searchOrders = AllIndexesOf(scraper.clientBrowser.DocumentText, searchText);
StringBuilder sb = new StringBuilder();

for (int i = 0; i < searchOrders.Count; i++)
{
    string order = scraper.clientBrowser.DocumentText.Substring(searchOrders[i] + searchText.Length, 6);
    scraper.clientBrowser.Document.GetElementById(order).InvokeMember("Click");

    for (int j = 0; j < scraper.clientBrowser.Document.Window.Frames.Count; j++)
    {
        if (scraper.clientBrowser.Document.Window.Frames[j].Document != null && scraper.clientBrowser.Document.Window.Frames[j].Document.Body != null)
        {
            string orderText = scraper.clientBrowser.Document.Window.Frames[j].Document.Body.InnerText ?? "Nope";
            //MessageBox.Show(j + Environment.NewLine + orderText);
            if (!orderText.Contains("Nope"))
            {
                sb.AppendLine(orderText + Environment.NewLine);
            }
        }
    }
}
Clipboard.SetText(sb.ToString());
然后在我使用的课堂上:

while(!scraper.DocumentLoaded)
{
    System.Threading.Thread.Sleep(100);
}

听起来您需要确保页面已完全加载,就像可能存在竞争条件一样。我建议将事件连接起来,然后尝试您的报废逻辑

更新

我一开始忽略了这一点,这肯定与你的问题有关。调用
click
的行,如scraper.clientBrowser.Document.GetElementById(order.InvokeMember(“click”)。这是在迭代中完成的,它很可能会操纵DOM——不是吗?我建议完全不同地处理这个问题。你到底想实现什么(而不是如何实现)


仅此一点,我建议您参考此Q/A,看看他们是如何等待点击完成的。

我只能在这里做客一件事:

当您取消注释
MessageBox.Show
时,当消息框显示信息时,
clientBrowser
使用此时间完成页面加载。然后,当您在消息框中按OK时,页面加载完成,因此您可以得到结果。当您对其进行注释时,您不会等待页面加载,因此结果是不同的。

问题可能是,您的代码在调用“单击”后加载页面之前获取body.InnerText。当messageBox未注释时,浏览器有更多的时间加载页面并获取正确的数据。是否等待文档加载?尝试在
DocumentCompleted
事件上执行所有这些操作(如果您使用的是框架,可能需要一些额外的修改,您似乎是这样的)DocumentCompleted在单击元素@JclSystem.Threading.Thread.Sleep(2000)后未触发;每次单击也不起作用后,将尝试此操作,请稍等片刻。
LoadCompleted
适用于WPF版本(在
System.Windows.Controls
)。Winforms的正确选项是
DocumentCompleted
。您可能需要检查
DocumentCompleted
参数上的URL是否与导航到的URL相同,特别是如果您使用的是框架(
DocumentCompleted
将触发多次),则单击元素后DocumentCompleted未触发@JclSystem.Threading.Thread.Sleep(2000);每次点击后也不起作用
while(!scraper.DocumentLoaded)
{
    System.Threading.Thread.Sleep(100);
}