document.querySelector mit AppleScript / Safari

Ich brauche ein Skript, um jede Registerkarte in Safari zu öffnen, wenn ich "valueIneed" von einer internen Website erhalte

Hier ist das HTML-Tag

<td class="orderDetails">


    <p class="details">
        (My Certificate)
    </p>

Hier ist, was ich versucht habe, aber das schlägt fehl

tell application "Safari"
    do JavaScript "
        var forgiveStatus = document.querySelector('class[details\"(My Certificate).innerHTML;
        " in current tab of first window
    set checkvalue to (do JavaScript "theStatus;" in current tab of first window) as string
end tell

Für weitere Informationen könnte es mehrere Instanzen desselben Tags geben, und ich muss jedes in einem neuen Tab öffnen oder noch besser nacheinander darauf klicken

Es gibt etwas Seltsames mit querySelectorder Funktion. Es scheint mir, dass es dort keine schließende Klammer gibt. Hier sind Beispiele für die richtige Verwendung: developer.mozilla.org/en-US/docs/Web/API/Document/querySelector
<p class="details">In diesem Fall müssen Sie anrufen, um den Wert von zu erhaltendocument.querySelector(".details").innerHTML

Antworten (2)

Sie haben keine Anführungszeichen oder Klammern geschlossen. Sie benötigen die folgenden vier Zeichen.

var theStatus = document.querySelector('class[details="(valueIneed)"]')
                                                                   ^^^^

Das ist jetzt syntaktisch korrektes JavaScript. Ich bezweifle immer noch, dass es das tut, was Sie brauchen, aber ohne das DOM der Seite, auf der Sie dies ausführen, und eine vollständige Problembeschreibung zu sehen, kann ich es nicht mit Sicherheit sagen.

Angesichts der Aktualisierung Ihrer Frage mit einem HTML-Snippet funktioniert der Code, den Sie versuchen, nicht. Verwenden Sie das folgende JavaScript, um den inneren HTML-Code des Elements abzurufen:

document.querySelector("td.orderDetails .details").innerHTML;
Danke, ich habe das versucht, aber dann bekomme ich immer einen Syntaxfehler "Ende der Zeile erwartet, aber gefunden "(".
@Kevin Dann ist etwas anderes ernsthaft falsch. Vielen Dank für die Aktualisierung Ihrer Frage, siehe Bearbeiten. Denken Sie daran, dass dies Ask Different ist, nicht Stack Overflow!
property tmp : "~/Desktop/safarihtml.html"

set htmls to {}

tell application "Safari" to tell window 1 to if exists then ¬
    set htmls to do JavaScript ¬
        "Array.from(document" & ¬
        "          .getElementsByClassName('details'))" & ¬
        "     .map(x=>x.innerHTML);" in current tab

repeat with html in htmls
    newTabWithHTML(html)
end repeat

on newTabWithHTML(html)
    local html

    set furl to URL of tmpfile()

    set eof of (tmpfile() as alias) to 0
    write html to (tmpfile() as alias) as «class utf8»

    tell application "Safari" to tell ¬
        (a reference to window 1)
        if not (exists) then make new document

        set current tab to make new ¬
            tab with properties ¬
            {URL:furl}

        repeat until name of current tab ¬"Untitled"
            delay 1
        end repeat
    end tell

    delete tmpfile()
end newTabWithHTML


on tmpfile()
    tell application "System Events"
        set f to a reference to the file tmp
        if not (exists f) then (make new file ¬
            with properties {name:tmp})

        return f
    end tell
end tmpfile