Datum via Javascript von Datepicker setzen



  • Hi,

    derzeit versuche via headless browser auf der Seite http://www.skyscanner.de/ ein passendes Datum einzugeben. Nun muss ich dafür den Datepicker ansteuern und bisher ist mir dies nicht gelungen.
    Der Browser den ich nutze kann Javascript-Code direkt auswerten (via browser.evaluate("myscript")), nur hat der JS-Code den ich verwendet habe bis dato nicht funktioniert.

    Wie löse ich das?

    Hier der Code des gesamten Formulars:

    <section id="search-controls" class="theme-dark ">
        <h2 class="hide">Suchen</h2>
    <form action="/r/Search/" class="clearfix" id="search-controls-form" method="post">        <div class="row">
                <div class="two-col-layout" id="departure">
                    <label for="departure-input">Von</label>
                    <input name="departure-input" id="departure-input" tabindex="1" type="text" list="departure-list" autocomplete="off" placeholder="Land, Stadt oder Flughafen eingeben" 
                           autocorrect="off" autocapitalize="off" spellcheck="false">
                    <span id="departure-input-helper" class="input-helper"></span>
                </div>
                <span id="controls-swap" title="Klicken Sie hier, um den Abreise- und Ankunftsort zu tauschen.">
                    <span class="hidden">Klicken Sie hier, um den Abreise- und Ankunftsort zu tauschen.</span> 
                </span>
                <div class="two-col-layout" id="destination">
                        <span id="map-anchor"><a href="/karte-fuer-billigfluege">Karte</a></span>
                    <label for="destination-input">Nach</label>
                    <input name="destination-input" id="destination-input" tabindex="2" type="text" list="destination-list" autocomplete="off" placeholder="Land, Stadt oder Flughafen eingeben" 
                           autocorrect="off" autocapitalize="off" spellcheck="false">
                    <span id="destination-input-helper" class="input-helper"></span>
                    <div id="prefer-directs-toggle" class="clearfix">
                        <input type="checkbox" tabindex="3" name="prefer-directs" id="prefer-directs-input">
                        <label for="prefer-directs-input">Direktverbindung bevorzugt</label>
                    </div>
                </div>
            </div>
            <div class="row">
                <div id="journey-details">
                    <div id="journey-type-toggle" class="clearfix">
                        <input type="radio" tabindex="4" value="1" name="journey-type" id="journey-type-return" checked="checked">
                        <label for="journey-type-return">Rückreise</label>
                        <input type="radio" tabindex="4" value="0" name="journey-type" id="journey-type-oneway">
                        <label for="journey-type-oneway">Nur Hinreise</label>
                    </div>
                    <div id="journey-date-container" class="clearfix">
                        <p class="label">Hinreise</p>
                        <div class="journey-date">
                            <label for="departure-date-calendar" class="hide">Abreisedatum</label>
                            <input name="departure-date-calendar" id="departure-date-calendar" tabindex="5" class="datepicker" autocomplete="off" type="text" placeholder="Abreisedatum">
                            <span id="depart-date-desc" class="label"></span>
                        </div>
                        <div class="journey-date journey-date-return">
                            <label for="return-date-calendar" class="hide">Rückreisedatum</label>
                            <input name="return-date-calendar" id="return-date-calendar" class="datepicker" tabindex="6" autocomplete="off" type="text" placeholder="Rückreisedatum">
                            <span id="return-date-desc" class="label"></span>
                        </div>
                    </div>
                </div>
                <div id="cabin-class-passenger-info-container" class="clearfix">
                    <div id="passenger-container" class="clearfix">
                        <div id="passenger-number-container" class="clearfix">
                            <p class="label">Reisende</p>
                            <div class="passenger-info">
                                <span class="passenger-adult"><input type="number" pattern="\d+" tabindex="7" maxlength="1" value="1" id="passenger-info-adult"></span>
                                <label for="passenger-info-adult">12+ Jahre</label>
                            </div>
                            <div class="passenger-info">
                                <span class="passenger-child"><input type="number" pattern="\d+" tabindex="8" maxlength="1" value="0" id="passenger-info-child"></span>
                                <label for="passenger-info-child">unter 12</label>
                            </div>
                            <div class="passenger-info  passenger-info-last">
                                <span class="passenger-infant"><input type="number" pattern="\d+" tabindex="9" maxlength="1" value="0" id="passenger-info-infant"></span>
                                <label for="passenger-info-infant">unter 2</label>
                            </div>
                        </div>
                    </div>
                    <div id="cabin-class-container" class="clearfix">
                        <p class="label">Kabinenklasse</p>
                        <select id="cabin-class" tabindex="10">
                            <option value="Economy">Economy</option>
                            <option value="PremiumEconomy">Premium Economy</option>
                            <option value="Business">Business Class</option>
                            <option value="First">First Class</option>
                        </select>
                    </div>
                </div>
            </div>
            <div id="search-ancillaries" class="row last clearfix">
                    <ul id="search-compare-units" class="compare-units-container icon-free-list clearfix hide">
                        <li class="label">Preis-Check (neue Fenster)</li>
                        <li class="template">
                            <input id="compare-unit-key" class="compare-unit-checkbox compare-unit-key" tabindex="11" type="checkbox">
                            <label for="compare-unit-key">labelValue</label>
                        </li>
                    </ul>
                <div id="search-controls-container">
                    <button tabindex="20" type="submit" id="search-controls-button" class="large-button">
                        <span class="button-text">Suchen</span>
                        <span class="button-spinner">&nbsp;</span>
                    </button>
                </div>
            </div>
    </form></section>
    

    Vielen Dank für jede Hilfe 🙂


  • Mod

    Was du machst ist der falsche Ansatz.

    Aber um das Problem zu lösen, einfach
    $('#return-date-calendar').val("27.03.2014");
    oder dergleichen im Kontext der Seite ausführen.

    Aber sag mal was du eigentlich machen willst, weil ich bin mir ziemlich sicher dass es anders viel viel viel viel viel besser geht.



  • Ich möchte Reisedaten eingeben und das Ergebnis der Suche fetchen und speichern.
    Danke schonmal, was würdest du vorschlagen?


  • Mod

    Namenloser324 schrieb:

    Ich möchte Reisedaten eingeben und das Ergebnis der Suche fetchen und speichern.
    Danke schonmal, was würdest du vorschlagen?

    Ich würde mir ansehen welche Daten an den Server übermittelt werden und dann dort nur noch das Ergebnis parsen. Frameworks wie scrapy.org helfen dir dabei.

    Manchmal bieten solche Webseiten auch eine API an die man nutzen kann.



  • Hatte ich schon versucht (bin aber leider n Noob in Webangelegenheiten) mit Firebug, Firefox Netzwerkanalyse sowie Fiddler 2.
    Ich untersuche es dann nochmal, worauf muss ich achten? Trotz des method="Post" wird keine Post-Nachricht übermittelt.

    Dann guck ich mir mal scrapy an, hatte das schon in Erwägung gezogen, aber ob mangelndem Python 3 support links liegen gelassen.
    Danke!



  • Okay, ich verstehe zwar nicht wieso es kein 'POST' gibt, aber man wird einfach geredirected auf ne URL aufgebaut aus Hinflugort/Rückflugort/Hinreisedatum/Rückreisedatum und ob man nur nen Hinflug buchen möchte, offenkundig ignoriert der sonst alle Angaben...^^



  • Damit ich nicht alles vollspamme mal angemeldet:

    Mea Culpa, hatte ausversehen einen Filter an der das Post ausgeblendet hatte. Ok,
    die Postdaten habe ich damit.

    Die Location in der Kopfzeile ist dann vermute ich mal die Zielurl an welche ich senden muss?

    "http://www.skyscanner.de/dataservices/routedate/v2.0/32ff21eb-c509-4c7d-b75d-885de247c55b


Log in to reply