我在我目前正在處理的應用程序中遇到這個奇怪的問題。C#字符串比較不起作用
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());
的事情是,每當我去掉了MessageBox.Show,我可以清楚地看到orderText充滿了比「不」,StringBuilder的得到填補另一個值,以及正確的文本被複制。
但是,如果我評論Messagebox.Show,此循環的結果總是「不」。我被困在這裏,我不知道什麼會導致這樣的事情。
scraper.clientBrowser是一個System.Windows.Forms.WebBrowser。
更新: 通過等待文件被加載解決問題,創造了這個機制:
public bool DocumentLoaded
{
get { return documentLoaded; }
set { documentLoaded = value; }
}
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.DocumentLoaded = true;
this.clientBrowser = sender as WebBrowser;
}
void clientBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
this.DocumentLoaded = false;
}
然後在課堂上我使用:
while(!scraper.DocumentLoaded)
{
System.Threading.Thread.Sleep(100);
}
問題可能是,您的代碼在調用「Click」之後加載頁面之前獲取body.InnerText。當您對messageBox取消註釋時,瀏覽器有更多時間加載頁面並獲取正確的數據 – VDN
您是否等待文檔加載?嘗試在'DocumentCompleted'事件上做所有這些事情(如果您使用的是框架,可能需要額外的調整) – Jcl
單擊元素後,DocumentCompleted不會觸發@Jcl –