Veranstaltungen IE11 auf ändern
Mein code startet ein IE 11-Seite auf einen link klickt und dann versucht, füllen Sie zwei dropdown-Listen. Die erste gefüllt wird, erfolgreich mit dem Wert "2012"
. Aber der zweite nicht mit dem Wert ausgefüllt "TOYOTA"
.
Trotz der Tatsache, dass die zweite dropdown-Liste nicht mehr angezeigt, die der Befehl "select", es nur nicht zeigen "TOYOTA"
. In anderen Worten, es geht aus dem Befehl "wählen", um eine leere. In der Erwägung, dass die erste dropdown-Liste richtig geht aus dem Befehl "wählen", um "2012"
.
Ich dachte, es war wahrscheinlich mit der Tatsache zu tun, dass die zweite dropdown wird zeigen Werte, die angewiesen sind auf die erste dropdown-Liste die aktuelle Auswahl. Und dass einige onchange oder fireevent-Befehl erforderlich.
Habe ich gesucht, sehr viel online, und ich habe ähnliche Probleme, die ich habe versucht, den Schwamm aus. Im Allgemeinen gab es zwei Hauptvarianten der code, den ich versucht habe. Wie immer würde ich durchaus dankbar, wenn jemand könnte möglicherweise führen Sie diesen code und/oder mich beraten. Die erste ist wie diese:
Sub GetQuote()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate ("website")
IE.Visible = True
Do
DoEvents
Loop Until IE.readystate = 4
Dim e
Set e = IE.document.getElementsByClassname("id name of button")(1)
e.Click
Application.Wait (Now + TimeValue("00:00:02"))
Do
DoEvents
Loop Until IE.readystate = 4
Dim z As Object
Set z = IE.document.getElementbyid("vehicleYearOfManufactureList")
z.Focus
z.SelectedIndex = 4
z.FireEvent ("onchange")
Application.Wait (Now + TimeValue("00:00:02"))
Dim y As Object
Set y = IE.document.getElementbyid("vehicleMakeList")
y.Focus
y.Value = "TOYOTA"
y.FireEvent ("onchange")
End Sub
Und die zweite ist wie folgt:
Sub GetQuote()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate ("website")
IE.Visible = True
Do
DoEvents
Loop Until IE.readystate = 4
Dim e
Set e = IE.document.getElementsByClassname("sg-Btn sg-Btn--primary")(1)
e.Click
Application.Wait (Now + TimeValue("00:00:02"))
Do
DoEvents
Loop Until IE.readystate = 4
Dim z As Object
Set evt = IE.document.createEvent("HTMLEvents")
evt.initEvent "change", True, False
Set z = IE.document.getElementbyid("vehicleYearOfManufactureList")
z.SelectedIndex = 4
z.dispatchEvent evt
Application.Wait (Now + TimeValue("00:00:02"))
Dim y As Object
Set evt = IE.document.createEvent("HTMLEvents")
evt.initEvent "change", True, False
Set y = IE.document.getElementbyid("vehicleMakeList")
y.Value = "TOYOTA"
y.dispatchEvent evt
End Sub
Und hier ist der Quelltext für die zweite dropdown-Liste, die ich ausfüllen wollen mit "TOYOTA" (eine Sache, die ich bemerkt, wenn ich mit der Maus auf die zweite dropdown-Liste war, dass anstatt der üblichen Pfeil für mein cursor jetzt zeigt eine hand mit einem kleinen schwarzen Kreis, der sich ein Streik durch, das scheint im Einklang mit der Tatsache, dass die zweite dropdown-Liste scheint nicht in der Lage sein, um ausgewählt zu werden):
<option value="">Select</option><optgroup label="Common Makes" id="commonVehicleMakeOptionGroup"><option value="AUDI">Audi</option><option value="BMW">BMW</option><option value="FORD">Ford</option><option value="HOLDEN">Holden</option><option value="HONDA">Honda</option><option value="HYUNDAI">Hyundai</option><option value="KIA">Kia</option><option value="MAZDA">Mazda</option><option value="MERCEDES-BENZ">Mercedes-Benz</option><option value="MITSUBISHI">Mitsubishi</option><option value="NISSAN">Nissan</option><option value="SUBARU">Subaru</option><option value="TOYOTA">Toyota</option><option value="VOLKSWAGEN">Volkswagen</option><option disabled="disabled"></option></optgroup><optgroup label="All Makes" id="allVehicleMakeOptionGroup"><option value="ABARTH">Abarth</option><option value="ALFA ROMEO">Alfa Romeo</option><option value="ASTON MARTIN">Aston Martin</option><option value="AUDI">Audi</option><option value="BENTLEY">Bentley</option><option value="BMW">BMW</option><option value="CHERY">Chery</option><option value="CHRYSLER">Chrysler</option><option value="CITROEN">Citroen</option><option value="DODGE">Dodge</option><option value="FIAT">Fiat</option><option value="FORD">Ford</option><option value="FOTON">Foton</option><option value="GEELY">Geely</option><option value="GREAT WALL MOTORS">Great Wall Motors</option><option value="HOLDEN">Holden</option><option value="HONDA">Honda</option><option value="HSV">HSV</option><option value="HYUNDAI">Hyundai</option><option value="INFINITI">Infiniti</option><option value="ISUZU">Isuzu</option><option value="IVECO">Iveco</option><option value="JAGUAR">Jaguar</option><option value="JEEP">Jeep</option><option value="KIA">Kia</option><option value="LAND ROVER">Land Rover</option><option value="LEXUS">Lexus</option><option value="LOTUS">Lotus</option><option value="MAHINDRA">Mahindra</option><option value="MAZDA">Mazda</option><option value="MERCEDES-BENZ">Mercedes-Benz</option><option value="MINI">Mini</option><option value="MITSUBISHI">Mitsubishi</option><option value="NISSAN">Nissan</option><option value="OPEL">Opel</option><option value="PEUGEOT">Peugeot</option><option value="PORSCHE">Porsche</option><option value="PROTON">Proton</option><option value="RANGE ROVER">Range Rover</option><option value="RENAULT">Renault</option><option value="SAAB">Saab</option><option value="SKODA">Skoda</option><option value="SMART">Smart</option><option value="SSANGYONG">Ssangyong</option><option value="SUBARU">Subaru</option><option value="SUZUKI">Suzuki</option><option value="TATA">Tata</option><option value="TOYOTA">Toyota</option><option value="VOLKSWAGEN">Volkswagen</option><option value="VOLVO">Volvo</option></optgroup></select>
InformationsquelleAutor chris | 2015-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die beste Methode zum auswählen einer option in einem dropdown-ist die Verwendung der
selectedIndex
Eigenschaft oderselected = True
für eine der<option>
Elemente. Danach können Sie das Feuer deronchange
Veranstaltung selbst. Da deine Seite benutzt AJAX initialisiert werden weitere Listen basierend auf Ihrer Auswahl, müssen Sie warten, bis es abgeschlossen ist.Bekam ich gelangweilt und beschlossen, um zu bauen mein eigenes Auto. Ich nur mit der Funktionalität benötigt, um eine option aus der dropdown - und Feuer der
onchange
Veranstaltung zu einemSelectOption()
Funktion. Wahrscheinlich gibt es noch weitere raffinierte Möglichkeiten, um zu warten, bis das Ereignis abgeschlossen ist (wie die überprüfungie.busy
oderie.readystate
), aber ich bin einfach nur schlafen für ein paar Sekunden, nachdem ich jede option.Habe ich diese in den Windows Script Host, so hatte ich den Luxus, mit
WScript.Sleep()
. Sie brauchen nur solche zu ersetzen, die Anrufe mitApplication.Wait()
für VBA.Bond, ich möchte nur sagen, vielen Dank noch einmal für diesen code! Es ist mir genommen ein paar Stunden zu verstehen, die verschiedenen Teile, die die Funktion und Lesen, StrComp(), createEvent() und initEvent() und ich endlich sehen, warum und wie diese grundsätzlich funktioniert und die links zu den anderen code außerhalb der Funktion. Ich Frage mich allerdings, was bedeutet die Letzte Zeile der Funktion zu tun, oder warum ist es notwendig (d.h. SelectOption = True). Und eine andere Sache, die ich bin immer noch versuchen, zu verstehen, die Argumente der initEvent () - spezifisch, wie "change" ist mit jedem anderen bit des Codes und warum false, true
Ich bin gerade zurück
SelectOption = True
zu zeigen Erfolg. Ich bin nicht mit der return-Wert oben, aber Sie könnten schreiben:If Not SelectOption(d, "someControl", "someText") Then ...
einige Vorgang der Aufruf der Funktion fehlgeschlagen ist, zum Beispiel. Standardmäßig, alle Variante/Boolesche Funktionen liefern ein "falsy" Wert, wenn Sie nicht explizit gesetztTrue
. Also, wenn ich auf Fehler überprüfen früher auf und machen dann eineExit Function
, es ist tatsächlich wieder ein "falsy-Wert" (eine, die scheitern würden, eineIf
- test).Für
initEvent
, es dauert 3 params. Die zweite zeigt an, ob das Ereignis (in diesem Fall der "change" - Ereignis aus) er sollte seine Eltern und deren Eltern usw., bis die Ereignis-Kette. Das ist nicht notwendig. Wir brauchen nur es, um das Feuer für unser dropdown-Menü. Und Mach dir keine sorgen über den 3. param. Es spielt nicht eine Rolle spielt. Um ein Ereignis auszulösen, müssen Sie erstellen eine eigenständige Veranstaltung, die wir tun, mit derdoc.createEvent()
Funktion. Dann definieren Sie es. Dann sagen Sie ein control (in diesem Falle
unsere dropdown), um es auszulösen:e.dispatchEvent()
.Sollte das gleiche sein.
SelectOption
ist zu erwarten, ein text-string. So sollten Sie in der Lage sein, etwas zu tun:SelectOption d, "someID", Range("A1").Value
, unter der Annahme A1 enthält einige text.InformationsquelleAutor Bond
Wo ist die eigentliche URL? Oder ist es hinter einer Unternehmens-firewall, so dass niemand kann es sehen? Trotzdem, das Skript sollte so etwas wie dieses . . . .
InformationsquelleAutor