DAS GANZE BOARD WURDE DURCHSUCHT UND ICH KONNTE DEFINITIV KEINE FÜR MICH GEEIGNETE LÖSUNG FINDEN, WAS ENTWEDER AUS MEINER UNFÄHIGKEIT ODER AUS DER MANGELDEN BEHANDLUNG DIESES THEMAS IM BOARD RESULTIERT!
servus
mein vorhaben ist folgendes: ich möchte ein simples tool schreiben das auf rapidshare.
com eine datei hochlädt.
ich diesbezüglich schon was ausprobiert. ich hatte zuerst vor auf rapidshare das edit feld zum uploaden der datei (das feld in das der lokale link zur datei reinkommt) per script zu füllen, das muss man sich so vorstellen:
Delphi-Quellcode:
function WbEnumFields(WebBrowser: TWebBrowser; SL: TStrings): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := True;
//Hat das Dokument Forms? (Frames)
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Result := False;
Exit;
end;
//Bearbeite alle Frames
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
// Bearbeite alle Felder eines Frames
for j := 0 to FormItem.Length - 1 do
begin
try
SL.Add(FormItem.Item(j).Name);
except
Result := False;
Exit;
end;
end;
end;
end;
// Durchsuche alle Formulare im Webbrowser nach dem Feldnamen
// Übergabe:
// Webbroweser: Webbrowser, der die aktuelle Seite enthält
// FieldName : Name des gesuchten Felds
// Rückgabe
// Field : Field.x : Frame Nummer
// : Fielf.y : Feld Nummer im Frame
// Result : true -> Feld existiert
// : false -> Feld existiert nicht
// oder kein Dokument geladen
function WbFindField(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//Hat das Dokument Forms? (Frames)
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//Bearbeite alle Frames
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
// Bearbeite alle Felder eines Frames
for j := 0 to FormItem.Length - 1 do
begin
try
// Feldname wurde gefunden
// gebe ihn zurück und ende
if FormItem.Item(j).Name = FieldName then
begin
Field.x := i; // Position speichern
Field.Y := j;
Result := True;
exit;
end;
except
Exit;
end;
end;
end;
end;
// Trage Text in ein Editfeld ein
// Übergabe:
// Webbroweser: Webbrowser, der die aktuelle Seite enthält
// FieldName : Name des gesuchten Felds
// Rückgabe
// Value : Der Text, der in das Feld hinein soll
// Result : true -> kein Fehler
// : false -> Feld existiert nicht
// oder kein Dokument geladen
function WbSetEditField(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
Field: TPoint;
begin
// Position des Felds holen
if not WbFindField(WebBrowser, FieldName, Field) then
begin
Result := false; // Feld existiert nicht
exit; // Ende
end;
try
// Feld füllen
WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value := Value;
Result := True;
except
Result := false;
Exit;
end;
end;
// Lese Text aus einem Editfeld
// Übergabe:
// Webbroweser: Webbrowser, der die aktuelle Seite enthält
// FieldName : Name des gesuchten Felds
// Rückgabe
// Value : Text, der im Feld steht
// Result : true -> kein Fehler
// : false -> Feld existiert nicht
// oder kein Dokument geladen
function WbGetEditField(WebBrowser: TWebBrowser; FieldName: string; var Value: string): Boolean;
var
Field: TPoint;
begin
// Position des Felds holen
if not WbFindField(WebBrowser, FieldName, Field) then
begin
Result := false; // Feld existiert nicht
exit; // Ende
end;
try
// Feld lesen
Value := WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Value;
Result := True;
except
Result := false;
Exit;
end;
end;
so ist es im endeffekt möglich die seite nach dingen wie edit felder, buttons, ceckboxen und allen möglichen anderem kram zu scannen, und das so:
WbEnumFields(WebBrowser1, ListBox1.Items);
das einzige was ich damit ereiche ist ein eintrag mit dem namen 'filecontent'
und wenn ich das versuche zu bearbeiten:
WbSetEditField(WebBrowser1, 'filecontent', 'C:\...');
...tut sich garnichts
die MozillaFirefox komponente unterstützt so etwas nicht...
----
was ich nun ereichen möchte ist das mir anhand einer lokalen datei adresse auf dem computer (C:\...)der lösch- und der downloadlink der hochgeladenen datei, am besten in einer memo,richedit (log-datei ähnlich) übermittelt wird.
am besten wäre es wenn ich dafür nicht mit dem webbrowser arbeiten müsste (vieleicht mit
indy irgendwas zaubern..?)
----
WICHTIG:
So ein Tool zu programmieren ist 100% legal da rapidshare selbst ein opensource perl script anbietet das es ermöglicht datein hochzuladen, nur leider verstehe ich nchits von perl
http://images.rapidshare.com/software/rsapiresume.pl
man beachte das ich mich was internet bzw online programmierung erst noch ein wenig zurecht finden muss, also wäre es gut wenn man mir gut erklären würde wie es geht , ich will schließlich dazu lernen und nicht einfach ein fertiges script ohne jeglich erklärung an den kopf geworfen kriegen
der user der das schafft bekommt natürlich einen (virtuellen) kuss von mir
dann legt mal los
liebe grüße
buster