Оценивать с помощью юрского кода js, который модифицирует html
Я пытаюсь переопределить получение капчи внутри приложения C#. Возникли проблемы из-за отсутствия опыта в JS.
GET-запрос возвращает данные, которые содержат тег captcha src, по умолчанию пустой.
...
<div class="context"><img src="" id="capchaVisual" alt="loading..."></div>
...
Он также возвращает некоторый JavaScript, который заполняет капчу, например:
function() {
var h = window.location.href;
if (h.indexOf("mytag") + 1) {
var scr = $("#capchaVisual").attr("src");
$("#capchaVisual").attr("src", scr + "data:image/jpeg;base64,/9j/MYCAPTCHADECODED...");
}
Мои шаги в приложении C#:
- Загрузите JSON с данными и скриптами через WebClient и JavaScriptSerializer. Готово. Результат хранится в ответе jsonobject, где answer.data содержит html, а answer.e - скрипты для выполнения.
Попробуйте выполнить загруженные скрипты через юрский период:
var engine = new Jurassic.ScriptEngine(); engine.EnableDebugging = true; //engine.SetGlobalValue("window", answer.data); foreach (var line in answer.e) { var evalresult = engine.Evaluate(line); string t = evalresult.ToString(); }
Ошибка с: ReferenceError: окно не определено.
Если раскомментируйте строку 3engine.SetGlobalValue("window", answer.data)
, получите еще одну ошибку: TypeError: undefined не может быть преобразован в объект.
1 ответ
Нашел ответ в старых юрских вопросах. Мои сценарии используют объект окна DOM, но:
Полбартрум 26 января 2011 в 11:01
Нет извините!
Обе эти платформы основаны на существовании DOM браузера. По умолчанию Jurassic может запускать только "чистый javascript", как компилятор CoffeeScript.
В основном, если скрипт не ссылается на "документ" или "окно", он, вероятно, будет работать.