ASP.NET-Problem

  • Hallo,
    mein Autoit-Script soll den Inhalt einer Web-Seite einlesen und auf Veränderungen überprüfen. Konkret geht es um diese Seite:
    http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=1

    Die Startseite kann ich ja noch problemlos mit InetGet laden und auswerten. Aber dann soll das Script auf die nächste Seite blättern. Und das erfolgt nicht über einen normalen Link, sondern über eine Javascript-Funktion (z.B. für Seite 3:
    javascript:__doPostBack('ctl00$ContentBody$pgrTop$lbGoToPage_3','').

    Ich habe immerhin schon herausgefunden, dass dies eine typische ASP.NET-Funktion ist. Davon habe ich allerdings keine Ahnung. So wie ich es bisher verstanden habe, ähnelt es dem Submit-Ereignis, bei dem der Browser Formular-Daten an den Server schickt.

    Kann mir hier vielleicht jemand weiterhelfen, wie mein Script dem Webserver die nächsten Seiten entlocken kann ?

    Dankeschön.

    Einmal editiert, zuletzt von Axel_Zucker (15. Juni 2010 um 10:53)

  • wieso machst du nicht einfach aus

    Code
    http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=1


    ein

    Code
    http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=2


    usw. so kommst du doch an die nächste seite anspnsten würde ich dir die FF.au3 oder oder IE.au3 empfehlen, da kannst du mit einem Pather auch solche links verfolgen und einen klick imitieren

    hab mal ein bsp gemacht:

    Spoiler anzeigen
    [autoit]

    #include<FF.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _FFStart("http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=1")
    $i = 1
    Do
    FileWrite(@ScriptDir & "/Quelltext" & $i & ".txt", _FFReadHTML())
    $Click = _FFClick(_FFXPath("/html/body/form[@id='aspnetForm']/div[@id='doc3']/div[@id='bd']/div[@id='yui-main']/div[@id='Content']/div[2]/div[@id='ctl00_ContentBody_ResultsPanel']/div/table/tbody/tr/td[2]/a[15]/b", "", 9))
    _FFLoadWait()
    $i+= 1
    Until Not $Click

    [/autoit]
  • Das "&f1", "&f2" usw. gibt leider nicht die Seitenzahl wieder. Wär ja auch zu schön gewesen...

    Dein Beispiel verstehe ich nicht. Wie gebe ich das Element an, dass angeklickt werden soll ?

  • Hallo

    Also mein Beispiel öffnet ein neues FF Fenster und geht auf die seite : http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=1
    und holt sich von der seite mit _FFReadHTML() dein quelltext der Seite und schreibt diesen in eine Datei.
    Nachdem er dies gemacht hat klickt er auf Next, der Path dazu ist dieser:

    Code
    /html/body/form[@id='aspnetForm']/div[@id='doc3']/div[@id='bd']/div[@id='yui-main']/div[@id='Content']/div[2]/div[@id='ctl00_ContentBody_ResultsPanel']/div/table/tbody/tr/td[2]/a[15]/b


    wenn man daraus jetzt mit _FFXPath() ein Obj erstellt kann man mit _FFClick() einen klick darauf imitieren. Der Path für daas Next ist auf jeder Seite der selbe.
    Hm ja ne Do Until schleife ist vllt nicht ideal, da auf der letzten seite der path immer noch existoert somit würde er nie aufhören aber wenn dir die Seitenzahl ja bekannt ist kann man es ja in einer For Schleife machen.

    Ja du Fragts dich vllt wie ich an diesen Path komme?
    Da kann ich dir dieses Addon für Firefox empfehlen. Einfach installieren/aktivieren und dann kannst man ganz einfach mit einem Rechtsklick auf den link usw. im Kontextmenü "Im XPather anzeigen" wählen und das gibt einem dann diesen Path aus, den man direkt kopieren und in script eiinfügen kann.

    mfg Darter

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Guten Morgen.

    Dein Beispiel funktioniert bei mir leider nicht. Mit welcher Firefox-Version hast Du das getestet ? Ich nutze Version 3.63.
    Bei mir wird nur ein neues Firefox-Fenster mit der eingegebenen Startseite geöffnet. Dann wartet das Script eine Weile und bricht dann ab.
    Es wird nichtmal die erste Seite unter "quelltext1.txt" gespeichert. Die Datei bleibt leer.
    Nach Deiner Anleitung habe ich mit dem XPather-Addon nochmals den XPath ausgelesen und mit dem in Deinem Beispiel verglichen - kein Unterschied.

    Ich gebe hier mal die Autoit-Statusmeldungen an:

    Spoiler anzeigen


    >"C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Temp\test.au3" /autoit3dir "C:\Programme\AutoIt3" /UserParams
    +>08:39:37 Starting AutoIt3Wrapper v.1.10.1.7 Environment(Language:0407 Keyboard:00000407 OS:WIN_XP/Service Pack 3 CPU:X86)
    >Running AU3Check (1.54.10.0) from:C:\Programme\AutoIt3
    +>08:39:37 AU3Check ended.rc:0
    >Running(3.2.10.0):C:\Programme\AutoIt3\autoit3.exe "C:\Temp\test.au3"
    __FFStartProcess: ""C:\Programme\Mozilla Firefox\firefox.exe" -new-window "http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=1" -repl 4242
    _FFConnect: OS: WIN_XP WIN32_NT 2600 Service Pack 3
    _FFConnect: AutoIt: 3.2.10.0
    _FFConnect: FF.au3: 0.6.0.0b-5
    _FFConnect: IP: 127.0.0.1
    _FFConnect: Port: 4242
    _FFConnect: Delay: 2ms
    _FFConnect ==> Timeout: TCPConnect Error: 10061
    _FFConnect ==> General Error: Timeout: Can not connect to FireFox/MozRepl on: 127.0.0.1:4242
    __FFSend ==> Socket Error
    _FFCmd ==> Error return value
    __FFSend ==> Socket Error
    _FFCmd ==> Error return value
    __FFSend ==> Socket Error
    _FFCmd ==> Error return value
    _FFLoadWait: ._FFClick ==> No match: $sElement: FFau3.xpath
    __FFSend ==> Socket Error
    _FFCmd ==> Error return value
    __FFSend ==> Socket Error
    loaded in 816ms
    _FFCmd ==> Error return value
    +>08:40:44 AutoIT3.exe ended.rc:0
    >Exit code: 0 Time: 69.852

  • jo das sieht mir so aus, als hättest du mozrepl nicht installiert oder nicht aktiviert das bekommst du hier:
    http://wiki.github.com/bard/mozrepl/

    die Zeile sagt es dir :

    Code
    _FFConnect ==> General Error: Timeout: Can not connect to FireFox/MozRepl on: 127.0.0.1:4242

    Edit: Ich habe auch das Script nochmal etwas geändert, sodass es jetzt von den ersten 200 Seiten den Quelltext holt. Bei dem ersten hätte er nach der letzten Seite nicht aufgehört

    Spoiler anzeigen
    [autoit]

    #include<FF.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _FFStart("http://www.geocaching.com/seek/nearest.aspx?lat=50.281767&lng=9.19205&f=1")
    For $i = 1 To 200 ;Anzahl der max seiten
    FileWrite(@ScriptDir & "/Quelltext" & $i & ".txt", _FFReadHTML())
    _FFClick(_FFXPath("/html/body/form[@id='aspnetForm']/div[@id='doc3']/div[@id='bd']/div[@id='yui-main']/div[@id='Content']/div[2]/div[@id='ctl00_ContentBody_ResultsPanel']/div/table/tbody/tr/td[2]/a[15]/b", "", 9))
    _FFLoadWait()
    Next

    [/autoit]


    mfg Darter

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    2 Mal editiert, zuletzt von Darter (15. Juni 2010 um 09:11)

  • Juhu, es funktioniert. :thumbup:

    Nach der Installation von Mozrepl liefen alle Deine Beispiele sofort.
    Danke für Deine geduldige Hilfe.

    Schöne Grüße