Le aconsejo que revise (y, si lo desea, comente) el método que está utilizando para recuperar la información de la página web, ya que la mejor opción y la más fiable sería utilizar un método diferente para no tener que lidiar con el problema. ReactJS
comentarios en absoluto.
Si hubieras incluido esa parte de tu AppleScript junto con el resto, podría haber sido una oportunidad para resolver tu problema en su origen.
No obstante, aquí tienes un método para eliminar las etiquetas de tus cadenas de texto, aunque no es ni mucho menos el único, ni necesariamente el más elegante o eficiente. Pero es razonablemente limpio y, suponiendo que las etiquetas sean todas simples ReactJS
etiquetas de comentario, hará un trabajo fiable.
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
es una copia de su variable FirstTitle
incluyendo los saltos de línea que contenía (no estoy seguro de si estaban intencionadamente o eran un artefacto de cuando copió su script en el navegador); su presencia o ausencia no afecta a la eficacia de mi script, sino que simplemente necesitaba las dos líneas al principio del archivo stripTags
que se deshace de ellos.
string2
es el texto que ha facilitado al final de su pregunta.
He mostrado la salida de cada uno de estos siguientes procesamientos. He conservado las comillas dobles llamadas "inteligentes" que forman parte de la cadena y se encuentran fuera de las etiquetas; he visto que habías optado por eliminarlas, pero su presencia aquí -sólo a efectos de demostración- es una buena garantía visual de que el script se dirige sólo a las etiquetas y conserva el texto entre ellas. Espero que no te importe si dejo esas comillas inteligentes para que las uses como quieras.
Si tiene alguna duda, póngase en contacto conmigo.
AÑADIDO 2018-05-12:
@cjeccjec Gracias por actualizar la información del sitio web con la URL correcta. Consejo para la próxima vez: incluye el código que estás usando para obtener el título. Será más fácil para la gente ayudarte y también atraerá más ayuda.
Por suerte, este problema parece bastante sencillo. Utilizando getElementsByClassName()
es una buena idea, e incluso has conseguido identificar el nombre de la clase que te interesa, term-keyword__keyword
. Bien hecho.
Los elementos asignados a ese nombre de clase son <p>
elementos. En do tener un title
pero está vacía, así que sospecho que no es lo que estás usando ni lo que buscas.
También tienen una propiedad llamada textContent
que, como sugiere, devuelve el texto contenido en el elemento, es decir, las etiquetas de los elementos que se comparan en este juego. Creo que eso es lo que buscas, y está completamente libre de ReactJS
tags.
Este código devuelve un array de los textContent
propiedades de los tres cargados p.term-keyword__keyword
etiquetas en el sitio en un momento dado: las dos visibles en ese momento y que se están comparando, y una fuera de la pantalla, a la derecha, a la espera de ser visualizada para la siguiente comparación.
Array.from(document
.getElementsByClassName('term-keyword__keyword'),
e=>e.textContent.slice(1,-1)
);
También me he tomado la libertad de recortar las citas del principio y el final de los textos.
Incorpore esto a AppleScript de la siguiente manera
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"
Esos fueron los resultados que obtuve mientras jugaba. Intentaba adivinar si "Microsoft Word" o "Moobs" tenían más búsquedas en Internet, y acerté; entonces apareció "Malasia", como ya sabía que ocurriría.
Utilizando este método, no es necesario despojar a cualquier ReactJS
ni las comillas.