0
1-Navigate to admin page。
2 - 輸入用戶名和密碼
3導航到新的頁面
4填寫文本域等,並交一些文字。
5重複步驟3和4,直到循環結束
下面的代碼成功地確實步驟1和2,但是到達步驟3之前新頁面被加載,併產生未設置爲一個實例的錯誤「對象引用(「title」)。SetAttribute(「value」,「check1」);對象的名稱「doc.GetElementById(」title「)。
我試圖從最近3天實現這一點,但直到現在還無法達到第3步。任何幫助將不勝感激
bool AdminPagework =false;
bool postnavigationdone =false;
public Form1()
{
InitializeComponent();
webBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(AdminPageCredentials);
webBrowser1.Navigate("www.website.com/admin");
}
private void AdminPageCredentials(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (AdminPagework == false && (webBrowser1.ReadyState == WebBrowserReadyState.Complete))
{
HtmlDocument doc = webBrowser1.Document;
doc.GetElementById("login").SetAttribute("value", "ADMIN");
doc.GetElementById("pass").SetAttribute("value", "123");
doc.GetElementById("submit").InvokeMember("click");
AdminPagework = true;
webBrowser1.DocumentCompleted +=
new WebBrowserDocumentCompletedEventHandler(RedirectToPostPage);
webBrowser1.Navigate("http://www.website.com/admin/post.php");
}
}
public void RedirectToPostPage(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if ((postnavigationdone == false) && (webBrowser1.ReadyState == WebBrowserReadyState.Complete))
{
HtmlDocument doc = webBrowser1.Document;
doc.GetElementById("title").SetAttribute("value", "check1");
doc.GetElementById("content").SetAttribute("value", textBox2.Text);
doc.GetElementById("post-format-video").InvokeMember("click");
doc.GetElementById("in-category-64").InvokeMember("click");
webBrowser1.Document.GetElementById("mm").SetAttribute("value", "01");
webBrowser1.Document.GetElementById("jj").SetAttribute("value", "01");
webBrowser1.Document.GetElementById("aa").SetAttribute("value", "2013");
webBrowser1.Document.GetElementById("hh").SetAttribute("value", "01");
webBrowser1.Document.GetElementById("mm").SetAttribute("value", "01");
doc.GetElementById("publish").InvokeMember("click");
postnavigationdone = true;
}
}
親愛的它發現了元素,如果我改變邏輯。真正的問題是我的邏輯不會等待第二頁加載。 –
好吧......你使用什麼樣的「webBrowser」並不是很明顯。我建議在標準的Web控制瀏覽器上使用Watin或硒(最好)。你在那裏得到了.WaitForComplete()函數。無論如何,你總是可以做一個Thread.Sleep()一段合適的時間,以確保你的瀏覽器加載內容。請注意,標準的Web客戶端等不會執行JavaScript,因此如果您在普通瀏覽器中打開該頁面,最終可能會得到不同的DOM。 – skhro87