Download via Share.CX

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Download via Share.CX

    Hallo,

    In meinem Programm soll eine Datei von Share.CX als Free-User heruntergeladen werden. Leider verwendet Share.CX Buttons, die auf keine andere URL verweisen, sondern den Inhalt der Seite ändern. Für den Download muss auf 2 Buttons geklickt werden: 1 Mal auf "Kostenloser Download" und nach einer 60 Sekunden-Wartezeit auf den Button "Download starten". Den ersten Button habe ich mit folgendem Code hinbekommen:

    VB.NET-Quellcode

    1. Dim allelements As HtmlElementCollection = WebBrowser1.Document.All
    2. For Each webpageelement As HtmlElement In allelements
    3. If webpageelement.GetAttribute("name") = "method_free" Then
    4. webpageelement.InvokeMember("click")
    5. End If
    6. Next


    Das funzt bisher auch ganz gut. Nur den zweiten Button bekomme ich nicht hin. Dieser besitzt zum 1. keinen Namen-Tag, wodurch man andere verwenden muss (z.B. "id"). Welchen Tag muss ich hier nehmen?
    Und 2. wie bekomme ich es hin, dass er einen "Download ohne richtigen Link" startet, wenn man auf den letzten Button klickt?
    Oder gibt's da eine ganz andere Möglichkeit?
    Eine Beispieldatei wäre z.B.: share.cx/files/442017552351/pkey.dat.html

    Ich bin langsam am verzweifelm mit dem Code ;( Hoffe ihr könnt mir helfen!

    MfG, Deppenmagnet
    The lol will never die.

    Deppenmagnet schrieb:

    Das funzt bisher auch ganz gut. Nur den zweiten Button bekomme ich nicht hin. Dieser besitzt zum 1. keinen Namen-Tag, wodurch man andere verwenden muss (z.B. "id"). Welchen Tag muss ich hier nehmen?

    Dein Button hat sowohl einen Namen als auch eine ID:

    XML-Quellcode

    1. <button type="submit" id="btn_download" value="Download starten" style="display:none;width:220px;">

    Nur wird er halt per Javascript nachgeladen.

    jvbsl schrieb:

    Das würde aber noch schöner über einen HTTPWebRequest gehen

    Wie das ? Gerade wenn Informationen über Ajax nachträglich eingefügt werden ?

    jvbsl schrieb:

    Wie wärs mit WebBrowser.Document.Forms(0).InvokeMember("submit") ?!


    Mit

    VB.NET-Quellcode

    1. WebBrowser1.Document.Forms(0).InvokeMember("submit")

    lässt sich der Button jetzt anklicken, nur wie bestätige ich jetzt den Download? z.Z. öffnet sich nur der Standard-Dialog des Internet-Explorers.

    MfG, Deppenmagnet
    The lol will never die.

    VB.NET-Quellcode

    1. Private download As Boolean = False
    2. 'Navigating Event:
    3. If download Then
    4. Dim wc As New Net.WebClient
    5. wc.DownloadFile(e.Url,Zielpfad)
    6. e.Cancel = true
    7. End If

    download setzt du auf True, nachdem du den Button klickst(aber direkt danach^^)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Das klappt irgendwie nicht so ganz :cursing:

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_Navigating(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    2. If download Then
    3. Dim wc As New Net.WebClient
    4. wc.DownloadFile(e.Url, "C:\Users\Admin\Desktop")
    5. e.Cancel = True
    6. End If
    7. End Sub


    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim allelements As HtmlElementCollection = WebBrowser1.Document.All
    3. WebBrowser1.Document.Forms(0).InvokeMember("submit")
    4. download = True
    5. End Sub

    Button1 wird löse ich vorerst noch manuell aus, wenn die Wartezeit beendet ist. Was mache ich denn falsch? ;(
    The lol will never die.
    sieht doch vom Prinzip her gut aus, aber evtl. solltest du doch download davor auf True setzen, für den Fall, dass jemand zu schnelles inet hat...xD
    und die DownloadFile Methode möchte als zweiten Parameter einen Dateinamen und keinen Ordner...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Deppenmagnet schrieb:

    Was mache ich denn falsch?

    Ganz einfach: Du jammerst hier bei jedem Problemchen den Thread voll, ohne erkennen zu lassen was Du selber getan hast. Natürlich bis auf den Code in das Clipboard zu kopieren und in Deinen Code 1:1 wieder einzusetzen :huh:

    ich weiss nicht ob der Code von jvbsl so funktioniert, aber weder er noch ich wollen unbedingt einen Share.CX Downloader basteln. Was also "funktioniert irgendwie nicht ? Was hast Du getan um den Fehler einzugrenzen? Hast Du mal Trace.WriteLine benutzt um zu sehen ob
    - das Navigating Event überhaupt aufgerufen wurde
    - in der URL überhaupt die Datei drinstand

    Falls ja, hast Du es nicht erwähnt, und wir können es schlecht wissen ...

    Kangaroo schrieb:

    - in der URL überhaupt die Datei drinstand


    Daran lags. Ich habe in den WeBrowser1.Navigating-Sub

    VB.NET-Quellcode

    1. MsgBox(e.Url.ToString)
    geschrieben. Allerdings gibt er bei jedem Klick nur die URL share.cx/files/442017552351/pkey.dat.html an.

    Man könnte das ganze aber doch auch "unelegant" lösen, indem man den IE-Downloaddialog mit Ausführen/Speichern bestätigt, oder?
    The lol will never die.

    Deppenmagnet schrieb:

    Man könnte das ganze aber doch auch "unelegant" lösen, indem man den IE-Downloaddialog mit Ausführen/Speichern bestätigt, oder?

    Ob elegant oder nicht, wenn man mit dem WebBrowser Control arbeitet so simuliert man halt oft den User. Was auch machmal kaum anders zu lösen ist, insbesondere bei Sites mit viel Javascript.

    Statt Messagebox nimm ruhig einmal das System.Diagnostics.WriteLine, gerade um gezielt an kritischen Stellen Variablen anzuzeigen ist das oft unersetzlich.

    Aber ich finde es gut, daß Du Dich jetzt mal selber an das Debugging gemacht hast ;)