Hallo kann jemand mir helfen?
Ich versuche verzweifelt Teilstring aus einem mit _HTMLReadText erstellten String.
Da ich mit "StringRegExpGUI.au3" erfolgreich selektieren konnte, verstehe ich nicht warum in meinem Skript nicht Funktioniert.
Skript ist reduziert auf mein Problem, aber soweit erhalten, dass es ausführbar bleibt.
Mit Xpath habe mich schon mehre Tage abgestrampelt, aber da gab es jede Menge Probleme, da die Sete ziemlich eigenartig verschachtelt ist.
Spoiler anzeigen
<div>
__<p>
____text
____<Hn>.....</Hn>
____text
____<table.......</table>
____text
__</p>
</div>
Also der Versuch mit "StringRegExp" aber dieser liefer nichts.
Hier mein Code:
#Tidy_Parameters=/pr=1 /tc=4 /uv=3 /reel /sci=9 /gds /gd=1
;AutoIT Version: v3.3.6.1
#include <FF.au3>
#include <array.au3>
#include <string.au3>
AutoItSetOption("MustDeclareVars", 1)
AutoItSetOption("wintitlematchmode", 2)
Global $aFF[10][3]
Local $sArtNrs = GetArtNr()
Global $_FF_COM_TRACE = True ; Trace communication to console (debugging)
Dim $URL = "http://www.HSE24.at"
Dim $sArtNr ; artikelnummer (eingabezeile ?)
Dim $rc, $s, $s1, $i1
$sArtNr = InputBox("Artike Nummer eingeben", "(sechsstellig 2xxxxx oder 3xxxxx)", "319320" & $sArtNrs)
$sArtNr = StringSplit($sArtNr & " 999999", " ") ;Wenn mehrere Nummern, als Array, aber auf alle fälle ein dumy
$sArtNr = $sArtNr[1] ;aber nur 1. nehmen
$i1 = _ArraySearch($aFF, $sArtNr, 1, UBound($aFF, 1) - 1, 1, 0) ; it im FF schon vorhanden?
If $i1 < 1 Then ; Neu Starten
If Not _ffStart($URL) Then
MsgBox(64, "FF-Start:", "Kann FireFox nicht erfolgreich starten.")
Exit
EndIf
Do
$rc = _FFObj(_FFXPath("id('header:searchfied')", "", 9), "value", $sArtNr) ; Eingabe Artikelnummer
_FFdisconnect()
_FFConnect()
Until @error = 0 ; warum es manchmal nicht funktioniert, aber auch so seltener nicht
MsgBox(0, "ArtNr:", $rc, 10)
$rc = _FFClick(_FFXPath("id('header:search_submit_button')", "", 9)) ; click auf "Suchen"
_FFLoadWait()
Else ; Vorhandene Seite verwenden
WinActivate($aFF[$i1][1])
WinWaitActive($aFF[$i1][1])
EndIf
; Warum auch immer, aber nur so gibt es neuen Daten
_FFDisConnect()
_FFConnect()
;=>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hier ist das Problem >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Xpath id('productBeschreibung') liefet inklusive Tabelle und keine Sonderzeichen
; Xpath id('productBeschreibung')//p geht auch nicht, 2 Leerstrings von XPATH usw.
;also einfach StringRegExp aber da stehe ich an, in StringRegExpGUI.au3 funktioniert tadellos
;aber im Sript nicht ?
$s = _FFReadText(6)
MsgBox(0, "Vor: $s(" & StringLen($s) & ")", $s)
$s = StringRegExpReplace($s, "(?s)([\n\r])", " ") ; Cr/Lf auf blank
MsgBox(0, "<Cr/Lf: $s(" & StringLen($s) & ")", $s)
$s = StringRegExp($s, "(?s)<p class=.mb-p. id=.tag-kurzbeschreibung.>(.*?)<table", 3)
If IsArray($s) Then
_ArrayDisplay($s, "HTML:")
$s = $s[UBound($s1, 1) - 1]
Else
$s = $s1
EndIf
MsgBox(0, "HTML:(" & StringLen($s) & ")", $s)
Exit
;=========================================================================================================================
Func GetArtNr() ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Local $GetArtNr = ""
Dim $wFF = WinList("HSE24 -"); alle Fenster mit "HSE" im Titel werden aufgeliste
Local $hFF
Local $j = 0, $i, $s1, $Nr
For $i = 1 To $wFF[0][0]
If StringRight($wFF[$i][0], 17) <> "- Mozilla Firefox" Then ContinueLoop
$Nr = ""
$hFF = $wFF[$i][1]
WinActivate($wFF[$i][1])
WinWaitActive($wFF[$i][1])
_FFdisconnect()
_FFConnect()
;WinSetState($hFF,"", @SW_SHOW )
;msgbox(0,"Activate/Connect:",$wFF[$i][0] & @crlf & "BestellNr:" &@tab& $Nr ,30)
$s1 = _FFXPath("id('productNameInH2')", "textContent", 9, 7)
If @error = 0 Then
$Nr = _StringBetween($s1, "(Bestellnr. ", ")")
If IsArray($Nr) Then $Nr = $Nr[0]
$j += 1
$aFF[$j][0] = $Nr
$aFF[$j][1] = $hFF
$aFF[$j][2] = $wFF[$i][0]
$aFF[0][0] = $j
$GetArtNr &= " " & $Nr
Else
$Nr = ""
EndIf
Next
ReDim $aFF[$j + 1][3]
Return $GetArtNr
EndFunc ;==>GetArtNr
Alles anzeigen
Habe Seiten Quellentext in Datei geschrieben, und mit "StrinRegExpGUI.au3" erfolgreich getestet, als auch aus Seitenquellen-Text kopiert, alles funktionierte wie erwartet.
In den Script hebe mit Copy/Pate den Pattern kopiert.
Was habe ich falsch gemacht?