Получить [String] из [object HTMLCollection]

Я боролся с этим. У меня есть действующая команда javascript, которую я отправляю из моего wkwebview:

document.getElementById('qlist-wrapper').getElementsByClassName('question-summary narrow').toString();

Когда я набираю это с консоли Safari, я возвращаюсь

"[object HTMLCollection]"

Но когда я пытаюсь использовать возвращенный объект, я в растерянности. Я получаю "EXC_BAD_ACCESS" (код =1 плюс адрес). 4 объекта полезной нагрузки связаны с объектом html: Any; они все 0s. Вот код в контексте:

webView.evaluateJavaScript("document.getElementById('qlist-

wrapper').getElementsByClassName('question-summary narrow').toString();", completionHandler: { (html: Any, error: Error?) in
        print("\(html)")
        if let error = error {
            print("\(error.localizedDescription)")
        }
    })
}

В конечном итоге моя цель - превратить коллекцию html в массив строк Swift. Как я могу это сделать? Я бы очень приветствовал решение JSON (возможно, с использованием Alamofire), но я упростил свой подход, чтобы сначала что-то заработало. (Я работал с Alamofire в прошлом, но не так много JSON). Если я попытаюсь посмотреть переменную перед печатью, я получу:

po html
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0xfffffffffffffff8).
The process has been returned to the state before expression evaluation.

1 ответ

У меня действительно есть две проблемы в этом вопросе:

1) Как мне получить HtmlCollection, преобразованный в массив? а также

2) Почему я получаю исключения, когда пытаюсь работать с результатами моего вызова javascript из WKWebView.

Я решил первую часть этой головоломки, поэтому я задокументирую это здесь и закрою это. Как только у меня получится лучше справиться с JavaScriptCore (там, где я ожидаю окончательного решения), я опубликую новый вопрос и сделаю перекрестную ссылку на этот вопрос / решение.

Если я введу следующее в консоль Web Inspector в Safari, я получу желаемое преобразование из HtmlCollection в Array:

Array.prototype.slice.call(document.getElementById('qlist-wrapper').getElementsByClassName('question-summary narrow'));
Другие вопросы по тегам