最近迫于壓力開發了個自動點擊網站新聞的小工具,使用IDHTTP組件,但是運行之后沒有效果
用IE瀏覽器點擊http://10.72.1.215/jwywTj.do?infoId=###會記錄瀏覽IP,并反饋“IP已被記錄”,再次用IE瀏覽器點擊會提示“IP已被記錄,請勿重復點擊”
用IDHTTP.GET ('http://10.72.1.215/jwywTj.do?infoId=###')只會反饋“IP已被記錄”,再次運行也是如此,不知道是怎么回事
代碼如下:
procedure TForm1.FormCreate(Sender: TObject);
var
reg:TPerlRegEx;
List: TStringList;
begin
reg:=TPerlRegEx.Create(nil);
Memo1.Clear;
Memo1.Lines.Add('此程式每小時自動點擊一次,請最小化至任務欄。'+chr(13)+chr(10));
try
reg.Subject:=idhttp1.Get(edit1.Text);
except
Memo1.Lines.Add('網址讀取超時......');
end;
reg.regex:='(?<=\b/\b)\d+(?=\b.html\b)';
while reg.MatchAgain do
begin
Memo1.Lines.Add(FormatDateTime('c',now));
Memo1.Lines.Add('獲取警務要聞ID號:'+ reg.MatchedExpression +'');
try
idhttp1.Request.AcceptLanguage := 'zh-cn';
idhttp1.Request.ContentType := 'application/x-www-form-urlencoded';
idhttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';
Memo1.Lines.Add(Trim(idhttp1.Get('http://10.72.1.215/jwywTj.do?infoId='+ reg.MatchedExpression +'')));
Memo1.Lines.Add('點擊成功!'+chr(13)+chr(10));
except
Memo1.Lines.Add('網址讀取超時......');
end;
end;
List := TStringList.Create; //創建List
if FileExists('log.txt') then
begin
List.LoadFromFile('log.txt'); //資料讀入到List
List.AddStrings(Memo1.Lines); //追加Memo文本到List
List.SaveToFile('log.txt'); //保存
end
else
begin
List.AddStrings(Memo1.Lines);
List.SaveToFile('log.txt');
end;
List.Free; //釋放
FreeAndNil(reg); //釋放
end;
uj5u.com熱心網友回復:
可能后端是用cookie來識別的吧。你get的時候附上cookie試試uj5u.com熱心網友回復:
感覺應該是COOKIE的問題,去試試看uj5u.com熱心網友回復:
這個用idhttp提交你得準確模擬提交的資料,包括http頭和cookie先用瀏覽器提交,記錄http頭和cookie,再把這些頭和cookie添加到idhttp里提交
uj5u.com熱心網友回復:
統計點擊量一般都是JS腳本,IdHttp不會執行JS的uj5u.com熱心網友回復:
四樓說得對,除了程式內部收集訪問資訊的,其它的第三方統計都是能過js收集的,也就是ajax,基本上除非用瀏覽器或瀏覽器組件訪問,不然都沒得統計資料的uj5u.com熱心網友回復:
IdHttp確實不會執行js腳本,解決這個問題可以用內嵌的WebBrowser,然后找出頁面的提交或者你所要點擊的按鈕,直接用代碼提交。//找頁面元素
class function TWBApi.GetElementObj(wb: TWebBrowser; index: integer; tagId: string; var obj: OleVariant): boolean;
var
doc: IHTMLDocument2;
intf: IWebBrowser2;
oleObj: OleVariant;
begin
result := false;
try
intf := wb.DefaultInterface;
doc := intf.Document as IHTMLDocument2; // wb.Document
if doc=nil then Exit;
oleObj := doc.all.item(tagId,index) as IHTMLElement2;
if TVarData(oleObj).VLongWord=0 then exit;
obj := oleObj;
result:= true;
except
end;
end;
//模擬點擊
if TWbApi.GetElementObj(wb,0,'submit',obj) then obj.click;
uj5u.com熱心網友回復:
禁止使用idhttp的 cookie即可轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84752.html
標籤:網絡通信/分布式開發
