webbrowser輕松實現自動填表
https://blog.csdn.net/xtfnpgy/article/details/14003589
webbrowser輕松實現自動填表
步驟如下:
第一步:獲取網頁 調用Webbrowser 的Navigate系列函數。等待網頁裝載完成,得到document對象。 在調用 webBrowser.Document 之前,請確保 Webbrowser 網頁裝載完成,可以通過Webbrowser的DocumentCompleted事件進行監視。 小技巧 先指定一個變量
步驟如下:
第一步:獲取網頁
調用Webbrowser 的Navigate系列函數。等待網頁裝載完成,得到document對象。
在調用 webBrowser.Document 之前,請確保 Webbrowser 網頁裝載完成,可以通過Webbrowser的DocumentCompleted事件進行監視。
小技巧
先指定一個變量:
IsCompleted
在調用Webbrowser 的Navigate,Refresh系列函數之前,將IsCompleted設為false。
在DocumentCompleted事件中,如果 ReadyState 為 WebBrowserReadyState.Complete(值為4),則設IsCompleted為true.
調用webBrowser.Document之前對IsCompleted進行判斷。如果不為true,則延時循環等待,直到IsCompleted被設為true.
第二步:設置網頁元素數據
確保得到document對象之後,通過 GetElementById 獲取網頁元素,如:
HtmlElement user = webBrowser.Document.GetElementById("user");
HtmlElement password = webBrowser.Document.GetElementById("password");
設置網頁元素值:
user.InnerText = "myname";
password.InnerText = "123456";
小技巧
作用 SetAttribute 設置下拉框,復選框,多選框數據
下拉框:
secret.SetAttribute("value", "question1");
復選框
rememberme.SetAttribute("Checked", "True");
多選框
cookietime.SetAttribute("checked", "checked");
當然,在SetAttribute 之前,也可以用GetAttribute取相關的屬性先進行判斷,再根椐需要進行設置。
第三步:提交網頁數據
先取提交的按鈕對象。
HtmlElement submit = webBrowser.Document.GetElementById("submit");
進行提交
submit.InvokeMember("click");
就是怎麽簡單。整個過程也就是 http get和post的過程。
當然也可以用低級點的WebRequest,還有更低級的socket來做,不過,現在的眾多頁面都有這樣,那樣的變形驗證碼,如果你和我一樣,搞不定驗證碼識別,又貪圖快點完成任務,上面的辦法絕對是又快,又好。
webbrowser通過屬性(tag)遍歷查找元素
function GetDocLinkByHref(doc : IHTMLDocument2;str_url:string):IHTMLAnchorElement;
var
i : Integer;
label_iDispatch : iDispatch;
label_element : IHTMLAnchorElement;
begin
Result := nil;
doc := webbrowser1.document as Ihtmldocument2;
if not Assigned(doc) then
Exit;
for i:=0 to doc.links.length-1 do
begin
label_iDispatch := doc.links.item(i,0);
label_element := doc.links.item(I,0) as IHTMLAnchorElement;
if (AnsiPos(str_url,(doc.links.item(I,0) as IHTMLElement).getAttribute(‘tag‘,0))>0)
then
begin
Result := label_element;
Break;
end;
end;
end;
webbrowser輕松實現自動填表