1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Forum
  3. AutoIt 3
  4. Hilfe & Unterstützung

.

  • MiamiRize
  • 12. Dezember 2016 um 16:44
  • Erledigt
1. offizieller Beitrag
  • MiamiRize
    Beiträge
    25
    • 12. Dezember 2016 um 16:44
    • #1

    Hallo erstmal,

    ich bin komplett neu und kenne AutoIT erst seit ein paar Tagen.

    Ich rätsele daran das ich auf einer Website gerne per Script einen Button drücken würde.

    Hinter dem Button hängt so wie ich es verstanden habe ein Java Script (gehe ich mit Rechtsklick auf Eigenschaften steht dort unter allgemein und URL Adresse: javascript:(function() {parent.showOverviewPrintDialog('external');})(); )

    Ansonsten kann ich sagen das er nicht wirklich einen namen hat aber ich kenne mich in diesen Sachen auch nicht so gut aus das einzige was für mich ein Anhaltspunkt ist ist: id="uiMainBar_mnuMain_radInnerMenu_m0_m0_m1" und href="javascript:(function() {parent.showOverviewPrintDialog('external');})();">

    Mein Code sieht bis jetzt so aus:

    #include <IE.au3>

    MsgBox(0, "Status", "Script Start")

    $oIE = _IECreate ("https://servicecenter-test.controlware.de/Tools/TicketDetailDialog/TicketDetailDialog.aspx?ticketid=IN1603759")

    Sleep(2000)

    _IENavigate($oIE,"javascript:javascript:(function() {parent.showOverviewPrintDialog('external');})();")

    MsgBox(0, "Status", "Script Stop")

    Das öffnen geht aber die Script Ausführung nicht.

    Ich hoffe jemand von euch kann mir helfen!

    Vielen Dank im vorraus

  • Kanashius
    Poweruser
    Reaktionen
    1
    Beiträge
    1.325
    • 12. Dezember 2016 um 17:08
    • #2

    Probier mal
    _IENavigate($oIE,"javascript:(function() {parent.showOverviewPrintDialog('external');});")
    oder
    _IENavigate($oIE,"javascript:parent.showOverviewPrintDialog('external');")

    Meine Website: Kanashius Website (einige meiner Programme sind auch hier zu finden)

  • MiamiRize
    Beiträge
    25
    • 12. Dezember 2016 um 17:22
    • #3

    Danke für die schnelle Antwort.

    Beide Wege funktionieren nicht.

    Es sollte sich eig. ein Fenster öffnen dies geschiet aber leider nicht

  • Kanashius
    Poweruser
    Reaktionen
    1
    Beiträge
    1.325
    • 13. Dezember 2016 um 10:05
    • #4

    ah... hab nicht aufgepasst. Dort wird parent verwendet. das gibt in dem navigate natürlich nicht...
    Probier mal den button mit der id zu bekommen: "uiMainBar_mnuMain_radInnerMenu_m0_m0_m1"

    Meine Website: Kanashius Website (einige meiner Programme sind auch hier zu finden)

  • MiamiRize
    Beiträge
    25
    • 13. Dezember 2016 um 10:25
    • #5
    Zitat von Kanashius

    ah... hab nicht aufgepasst. Dort wird parent verwendet. das gibt in dem navigate natürlich nicht...
    Probier mal den button mit der id zu bekommen: "uiMainBar_mnuMain_radInnerMenu_m0_m0_m1"

    Ich versteh nicht ganz was du damit meinst :D

    ich hab folgendes versucht:

    #include <IE.au3>

    MsgBox(0, "Status", "Script Start")

    $oIE = _IECreate ("URL")

    Sleep(2000)

    _IENavigate($oIE,"uiMainBar_mnuMain_radInnerMenu_m0_m0_m1")

    MsgBox(0, "Status", "Script Stop")


    //2


    #include <IE.au3>

    MsgBox(0, "Status", "Script Start")

    $oIE = _IECreate ("URL")

    Sleep(2000)

    _IENavigate($oIE,"javascript:parent.uiMainBar_mnuMain_radInnerMenu_m0_m0_m1('external');")

    MsgBox(0, "Status", "Script Stop")


    //3

    #include <IE.au3>

    MsgBox(0, "Status", "Script Start")

    $oIE = _IECreate ("URL")

    Sleep(2000)

    _IENavigate($oIE,"javascript:parent.uiMainBar_mnuMain_radInnerMenu_m0_m0_m1")

    MsgBox(0, "Status", "Script Stop")


    hat leider alles nicht funktioniert :C

    Einmal editiert, zuletzt von MiamiRize (9. Januar 2017 um 08:43)

  • Kanashius
    Poweruser
    Reaktionen
    1
    Beiträge
    1.325
    • 13. Dezember 2016 um 17:09
    • #6

    1. Bitte code in die passenden Tags setzen (</> oben in der Leiste und in dem Fenster dann Autoit auswählen). Das ist deutlich schöner zu lesen.
    2. Die Hilfe lesen, inklusive aller Befehle zu (in diesem Fall) _IE...
    Was du suchst lautet _IEGetObjById. Damit kannst du den Button mit der ID suchen und mit z.B. _IEAction anklicken.

    Meine Website: Kanashius Website (einige meiner Programme sind auch hier zu finden)

  • MiamiRize
    Beiträge
    25
    • 14. Dezember 2016 um 15:20
    • #7

    Ok ich hab mich jetzt etwas "fortgebildet" und habe nun dies:


    AutoIt: Drucken
    #include <IE.au3>
    
    
    MsgBox(0, "Status", "Script Start")
    
    
    $oIE = _IECreate ("URL")
    
    
    Sleep(2000)
    
    
    Local $oDiv = _IEGetObjById($oIE, "uiMainBar_mnuMain_radInnerMenu_m0_m0_m1")
    
    
    _IEAction($oDiv, "click")
    
    
    MsgBox(0, "Status", "Script Stop")
    Alles anzeigen

    Leider gehts immer noch nicht :C

    Einmal editiert, zuletzt von MiamiRize (9. Januar 2017 um 08:42)

  • Kanashius
    Poweruser
    Reaktionen
    1
    Beiträge
    1.325
    • 14. Dezember 2016 um 23:49
    • #8

    An sich müsste das funktionieren...

    zum Verbessern:
    Zeile 7 das Sleep ist nicht nötig. Solange die Optionalen Parameter von _IECreate nicht geändert werden wartet der Befehl, bis die Seite geladen ist.

    Du könntest mal schauen, was in der Konsole steht (Wenn du mit SciTE startest in dem kleinen Fenster unten in Orange). Dort werden Fehler ausgegeben, wenn z.b. die ID nicht gefunden wurde -> Der Fehler kann eingegrenzt werden. Ich vermute aber, dass die ID nicht stimmt...

    Mit dem gesamten Quellcode käme man vermutlich weiter...

    Meine Website: Kanashius Website (einige meiner Programme sind auch hier zu finden)

  • alpines
    天照大神
    Beiträge
    4.209
    • 15. Dezember 2016 um 13:35
    • #9

    Schau mal ob die Id die du klicken willst in einem <iframe> liegt. Wenn das der Fall ist kannst du nicht vom main Document drauf klicken sondern musst im Frame sein.

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  • MiamiRize
    Beiträge
    25
    • 9. Januar 2017 um 08:35
    • #10

    Sorry erstmal für die lange Pause hatte Urlaub und habe nicht auf an dem Problem weiter Gearbeitet -Sorry :D


    Zitat von Kanashius

    Du könntest mal schauen, was in der Konsole steht (Wenn du mit SciTE startest in dem kleinen Fenster unten in Orange). Dort werden Fehler ausgegeben, wenn z.b. die ID nicht gefunden wurde -> Der Fehler kann eingegrenzt werden. Ich vermute aber, dass die ID nicht stimmt..

    Wenn ich bei SciTE das Script starte (Tools und auf GO) steht unten in dem Fenster was komischer weise nicht Orang ist:

    AutoIt
    --> IE.au3 T3.0-2 Error from function _IELoadWait, $_IESTATUS_ClientDisconnected (-2147417848, Browser has been deleted prior to operation.)
    
    
    --> IE.au3 T3.0-2 Error from function _IEGetObById, $_IESTATUS_InvalidObjectType
    
    
    --> IE.au3 T3.0-2 Error from function _IEAction(click), $_IESTATUS_InvalidDataType
    Zitat von Kanashius

    Mit dem gesamten Quellcode käme man vermutlich weiter...

    Darf ich leider nicht posten ist firmen intern sorry :/

    Zitat von alpines

    Die Zeile mit der ID sieht so aus:

    AutoIt
    <a href= CODE </a>

    Ich kann dort leider kein <iframe> erkennen


    Vielen Dank nochmal für eure Hilfe :3

  • alpines
    天照大神
    Beiträge
    4.209
    • 9. Januar 2017 um 08:37
    • #11

    Der iframe liegt immer übergeordnet von den anderen Controls. Es ist eine eigene Website embedded in die Hauptwebseite. Sollte er in einem Frame liegen musst du erst in den navigiere und kannst dann klicken.

    Die IE.au3 hat manchmal Probleme beim starten, versuchs einfach mal so:

    AutoIt
    Do
    	$oIE = _IECreate("website")
    Until IsObj($oIE)

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  • MiamiRize
    Beiträge
    25
    • 9. Januar 2017 um 08:44
    • #12

    Also ich habe es nun so gemacht:


    AutoIt
    #include <IE.au3>
    
    
    MsgBox(0, "Status", "Script Start")
    
    
    Do
    	$oIE = _IECreate("URL")
     Until IsObj($oIE)
    
    
    Local $oDiv = _IEGetObjById($oIE, "uiMainBar_mnuMain_radInnerMenu_m0_m0_m1")
    
    
    _IEAction($oDiv, "click")
    
    
    MsgBox(0, "Status", "Script Stop")
    Alles anzeigen

    Leider bekomme ich immer diese fehler:
    --> IE.au3 T3.0-2 Error from function _IELoadWait, $_IESTATUS_ClientDisconnected (-2147417848, Browser has been deleted prior to operation.)
    --> IE.au3 T3.0-2 Error from function _IEGetObById, $_IESTATUS_InvalidObjectType
    --> IE.au3 T3.0-2 Error from function _IEAction(click), $_IESTATUS_InvalidDataType

    Ok dann siehts so aus als würde es in einen iframe liegen

  • BugFix
    aka McBarby
    Reaktionen
    7
    Beiträge
    11.162
    • 9. Januar 2017 um 09:02
    • Offizieller Beitrag
    • #13
    Zitat von MiamiRize

    --> IE.au3 T3.0-2 Error from function _IELoadWait, $_IESTATUS_ClientDisconnected (-2147417848, Browser has been deleted prior to operation.)

    Das im vorigen Post von dir gezeigte Snippet enthält aber gar kein _IELoadWait - wie kommst du dann zu dem Fehler? - habs gerade gesehen: _IECreate verwendet intern _IENavigate und dieses wiederum bei gesetztem Flag $iWait die Funktion _IELoadWait.
    In deinem Snippet musst du also das Flag für Wait in _IECreate auf 0 setzen, sonst hast du keinen Unterschied zu _IELOadWait!

    _IELoadWait ist auch nicht immer tauglich, sagt dir auch die Hilfe dazu:

    Zitat

    Browser scripting security restrictions may sometimes prevent _IELoadWait() from guaranteeing that a page is fully loaded and can occasionally result in untrapped errors.
    In these cases you may need to avoid calling _IELoadWait() and attempt to employ other methods of insuring that the page load has completed.
    These methods might include using a Sleep command, examining browser status bar text and other methods. When using functions that call _IELoadWait() for objects other than the InternetExplorer (browser) object, you may also be successful by calling _IELoadWait() for the browser yourself (e.g. _IELoadWait($oIE)).

    The most common causes of trouble are page redirects and cross-site scripting security restrictions associated with frames. Page re-writing techniques employed by some applications (e.g. Gmail) can also cause trouble here.

    MfG BugFix

    Mein Git | Meine UDF | Array-Tutorial | Bit-Tutorial | Dll-Tutorial | RegExp-Beispiel

    • Nächster offizieller Beitrag
  • MiamiRize
    Beiträge
    25
    • 9. Januar 2017 um 09:44
    • #14
    Zitat von BugFix

    Das im vorigen Post von dir gezeigte Snippet enthält aber gar kein _IELoadWait - wie kommst du dann zu dem Fehler? - habs gerade gesehen: _IECreate verwendet intern _IENavigate und dieses wiederum bei gesetztem Flag $iWait die Funktion _IELoadWait.In deinem Snippet musst du also das Flag für Wait in _IECreate auf 0 setzen, sonst hast du keinen Unterschied zu _IELOadWait!

    _IELoadWait ist auch nicht immer tauglich, sagt dir auch die Hilfe dazu:


    Vielen Dank für die ausführliche hilfe.

    Ich fühle mich wie der dümmste mensch der Welt aber könntest du mir sagen wie genau ich _IECreate auf 0 setze?

  • BugFix
    aka McBarby
    Reaktionen
    7
    Beiträge
    11.162
    • 9. Januar 2017 um 11:03
    • Offizieller Beitrag
    • #15
    Zitat

    _IECreate ( [$sUrl = "about:blank" [, $iTryAttach = 0 [, $iVisible = 1 [, $iWait = 1 [, $iTakeFocus = 1]]]]] )

    Im Funktionsaufruf sind alle möglichen Parameter aufgeführt. Sind Parameter mit einem Standardwert vorbelegt (In dieser Funktion sind alle Parameter vorbelegt), braucht man diese nicht angeben, wenn man sie mit dem Standardinhalt aufrufen will.
    Hier möchtest du aber den 4.ten Parameter ändern, somit musst du alle Parameter davor (auch wenn sie unverändert bleiben) angeben. Dein Aufruf muss also lauten:
    $oIE = _IECreate("URL", 0, 1, 0) 

    Aber ich vermute, dass das auch nichts ändern wird. Das $oIE wird vermutlich existieren - aber nicht sofort der durch das seiteninterne Skript nachzuladene Inhalt.
    Versuche es einfach mal mit obigem Aufruf und setze ein Sleep() dahinter, für den Anfang 2000 ms oder 1000 ms. Einfach variieren.

    MfG BugFix

    Mein Git | Meine UDF | Array-Tutorial | Bit-Tutorial | Dll-Tutorial | RegExp-Beispiel

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
  • MiamiRize
    Beiträge
    25
    • 9. Januar 2017 um 11:34
    • #16
    Zitat von BugFix

    Im Funktionsaufruf sind alle möglichen Parameter aufgeführt. Sind Parameter mit einem Standardwert vorbelegt (In dieser Funktion sind alle Parameter vorbelegt), braucht man diese nicht angeben, wenn man sie mit dem Standardinhalt aufrufen will.Hier möchtest du aber den 4.ten Parameter ändern, somit musst du alle Parameter davor (auch wenn sie unverändert bleiben) angeben. Dein Aufruf muss also lauten:
    $oIE = _IECreate("URL", 0, 1, 0) 

    Aber ich vermute, dass das auch nichts ändern wird. Das $oIE wird vermutlich existieren - aber nicht sofort der durch das seiteninterne Skript nachzuladene Inhalt.
    Versuche es einfach mal mit obigem Aufruf und setze ein Sleep() dahinter, für den Anfang 2000 ms oder 1000 ms. Einfach variieren.

    Also ein Fehler weniger! :D

    Danke für die Erklärung für dumme.


    AutoIt
    #include <IE.au3>
    
    
    MsgBox(0, "Status", "Script Start")
    
    
    $oIE = _IECreate("URL", 0, 1, 0)
    
    
    Sleep(2000)
    
    
    Local $oDiv = _IEGetObjById($oIE, "uiMainBar_mnuMain_radInnerMenu_m0_m0_m1")
    
    
    _IEAction($oDiv, "click")
    
    
    MsgBox(0, "Status", "Script Stop")
    Alles anzeigen

    Die Fehler:

    --> IE.au3 T3.0-2 Error from function _IEGetObById, $_IESTATUS_InvalidObjectType
    --> IE.au3 T3.0-2 Error from function _IEAction(click), $_IESTATUS_InvalidDataType

  • alpines
    天照大神
    Beiträge
    4.209
    • 9. Januar 2017 um 13:09
    • #17

    Poste mal den ganzen Source (der Website) hier rein, ansonsten können wir dir nicht helfen wenn du uns keinen funktionierenden Link zur Verfügung stellst.

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  • MiamiRize
    Beiträge
    25
    • 9. Januar 2017 um 13:31
    • #18

    Tut mir leid das darf ich leider nicht da das eine Firmen interne seite ist.

    Was braucht ihr denn um mir weiter zu helfen? (evt nur ein teil des source code?)

  • BugFix
    aka McBarby
    Reaktionen
    7
    Beiträge
    11.162
    • 9. Januar 2017 um 13:33
    • Offizieller Beitrag
    • #19

    Dann entferne doch alle relevanten Daten aus der Source. Wir brauchen die Struktur der Seite um die Web-Elemente und deren Anordnung feststellen zu können.

    MfG BugFix

    Mein Git | Meine UDF | Array-Tutorial | Bit-Tutorial | Dll-Tutorial | RegExp-Beispiel

    • Vorheriger offizieller Beitrag
    • Nächster offizieller Beitrag
  • alpines
    天照大神
    Beiträge
    4.209
    • 9. Januar 2017 um 13:38
    • #20

    Führ das mal aus und poste den Inhalt der Konsole:

    AutoIt
    #include <IE.au3>
    
    
    _IEErrorNotify(False)
    
    
    Do
    	$oIE = _IECreate("URL")
    Until IsObj($oIE)
    
    
    $oColl = _IETagNameAllGetCollection($oIE)
    
    
    For $oObj In $oColl
    	If $oObj.TagName = "iframe" Then ConsoleWrite("iframe gefunden" & @CRLF)
    	If $oObj.Id = "uiMainBar_mnuMain_radInnerMenu_m0_m0_m1" Then ConsoleWrite("uiMainBar gefunden" & @CRLF)
    Next
    
    
    _IEQuit($oIE)
    Alles anzeigen

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™