Ti consiglierei di esaminare (e, se lo desideri, feedback su) il metodo che stai utilizzando per recuperare le informazioni dal sito web, in quanto l'opzione migliore e più affidabile sarebbe quella di utilizzare un metodo diverso in modo tale da non devi affatto occuparti dei commenti di ReactJS
.
Se avessi incluso quella parte del tuo AppleScript insieme al resto, sarebbe stata una possibilità per risolvere il tuo problema all'origine.
Tuttavia, ecco un metodo per rimuovere i tag dalle stringhe di testo, sebbene non sia l'unico metodo, né necessariamente il più elegante o efficiente. Ma è ragionevolmente pulito e, presumendo che i tag siano tutti semplici tag di commento ReactJS
, farà un lavoro affidabile.
set string1 to "<!-- react-text: 45 -->“<!-- /react-text --><!-- \nreact-text: 46 -->Megan Fox<!-- /react-text --><!-- react-text: 47 -- \n>”<!-- /react-text -->"
set string2 to "<!-- react-text: 477 -->“<!-- /react-text --><!-- react-text: 478 -->iPhone 8<!-- /react-text --><!-- react-text: 479 -->”<!-- /react-text -->"
stripTags from string1 --> "“Megan Fox”"
stripTags from string2 --> "“iPhone 8”"
--------------------------------------------------------------------------------
to stripTags from s as text
local s
# Eliminate linebreaks and join to form one line of text
set the text item delimiters to {null, linefeed, return}
set s to the text items of s as text
# Use bash to isolate all the various tags within the string
# Note: not suitable for tags with irregular content, such as
# any that unexpectedly contain '<' or '>' as part of their
# text content. However, that shouldn''t be an issue here.
do shell script "egrep -io -e '<[^>]+>' <<<" & the quoted form of s
# Use the tags as a basis for elimination using AS's TIDs
set the text item delimiters to {null} & paragraphs of the result
set s to the text items of s as text
return s
end stripTags
string1
è una copia della tua variabile FirstTitle
, comprese le interruzioni di riga che conteneva (non sono sicuro se queste fossero intenzionalmente o un artefatto di quando hai copiato il tuo script nel browser); la loro presenza o assenza non influisce sull'efficacia del mio script, ma richiede semplicemente le due linee all'inizio del gestore stripTags
che le libera.
string2
è il testo che hai fornito in fondo alla tua domanda.
Ho mostrato l'output di ciascuna di queste seguenti elaborazioni. Ho mantenuto le doppie cosiddette quotazioni "intelligenti" che fanno parte della stringa e si trovano fuori dai tag; Ho visto che avevi scelto di eliminarli, ma la loro presenza qui - solo a scopo dimostrativo - è una bella rassicurazione visiva che lo script ha come target solo i tag e conserva il testo in mezzo. Spero non ti dispiaccia se lascio quelle citazioni intelligenti per te da affrontare come desideri.
Fammi sapere se hai domande.
AGGIUNTO 2018-05-12:
@cjeccjec Grazie per aver aggiornato le informazioni del sito Web con l'URL corretto. Suggerimento per la prossima volta: includi il codice che stai utilizzando per ottenere il titolo. Sarà più facile per le persone aiutarti e attirerà anche più aiuto.
Fortunatamente, questo problema sembra abbastanza semplice. L'utilizzo di getElementsByClassName()
è una buona idea e sei persino riuscito a identificare il nome di classe di interesse, term-keyword__keyword
. Ben fatto.
Gli elementi assegnati a quel nome classe sono <p>
elementi. Loro fanno hanno una proprietà title
, ma è vuota, quindi sospetto che non sia quello che stai usando, né quello che stai cercando.
Hanno anche una proprietà chiamata textContent
, che, come suggerisce, restituisce il testo contenuto all'interno dell'elemento, cioè le etichette degli oggetti confrontati in questo gioco. Credo che questo è ciò che stai cercando, e è completamente privo di tag ReactJS
.
Questo codice restituisce una matrice delle proprietà textContent
dei tre tag p.term-keyword__keyword
caricati sul sito in qualsiasi momento: i due attualmente visibili e in gioco confrontati; e uno fuori campo a destra in attesa di scorrere in vista per il prossimo confronto.
Array.from(document
.getElementsByClassName('term-keyword__keyword'),
e=>e.textContent.slice(1,-1)
);
Mi sono anche preso la libertà di tagliare le virgolette dall'inizio e dalla fine dei testi.
Incorporalo in AppleScript in questo modo:
tell application "Safari" to set labels ¬
to do JavaScript "Array.from(document" & ¬
".getElementsByClassName('term-keyword__keyword')," & ¬
"e=>e.textContent.slice(1,-1));" in the front document
--> {"Microsoft Word", "Moobs", "Malaysia"}
item 2 of labels --> "Moobs"
Questi erano i risultati che mi sono stati restituiti durante il gioco. Stavo cercando di indovinare se "Microsoft Word" o "Moobs" avessero più ricerche su Internet, cosa che ho ottenuto correttamente; poi "Malesia" scorreva in vista come sapevo già che sarebbe.
Utilizzando questo metodo, non è necessario rimuovere alcun tag ReactJS
di distanza, né virgolette.