2014-01-30 2 views
0

Я пишу сканер, который просматривает страницы, если он обнаруживает кнопку типа «>» на текущей странице. Код выходит из строя примерно 1 раз из 100 с ошибкой «Uncaught TypeError: невозможно прочитать свойство« innerText »неопределенного». При попытке устранения неполадок я открываю консоль разработчика Chrome и проверяю селектор на этой конкретной странице вручную. Он всегда возвращает то, что я ожидаю, и кнопка визуально там. Я озадачен, почему он терпит неудачу только в редких случаях, и в то же время страница с ошибкой выглядит нормально. Любые предложения, как изолировать проблему?Переключатель JQuery не работает с перерывами

Код:

lastButton = $(".button a").last()[0]; 
if(lastButton.innerText === ">") { 
    next(lastButton.href, "getFriends", id); 
} 
+0

Когда это не удается, я запускаю один и тот же селектор с консоли, и он показывает объект DOM просто отлично. Это самое неприятное для меня. Я попытаюсь скопировать его при следующем сбое. – gradusas

+0

На самом деле это не похоже на кнопки, а на элементы с классом 'button'. Как говорится, что происходит, когда он сталкивается с элементом класса 'button', который не имеет внутреннего текста? –

+0

Да, это не настоящий элемент кнопки. Это 'div' с классом' button', а затем 'a' внутри, что мне нужно. Когда я проверяю постфактум на ошибку, он всегда присутствует. – gradusas

ответ

0

Обнаружено, что этот код фактически работает нормально в течение 100% времени. Проблема как-то связана с моим искателем, выполняющим другую функцию очистки, не загружая страницу для этой функции. Таким образом, сложная проблема с перерывами находится где-то в другом месте. Спасибо всем, кто пытался помочь!

1

В какой момент ваш гусеничный запустить этот селектор? Если страница еще не полностью завершена, так как DOM не готов или код на странице, возможно, не закончил создание страницы, ваш вызов $(".button a").last() вернет пустой массив. Поскольку вы можете получить доступ к любому индексу из этого пустого массива, когда вы попытаетесь извлечь первый элемент из него, вы получите undefined, что приведет к ошибке при попытке вызвать .innerText.

Попробуйте выполнить регистрацию, сколько элементов возвращается селектором, чтобы убедиться, что это так.

+0

Скрипт Crawler вводится из расширения Chrome. Он работает на «document_idle», поэтому я предполагаю, что существует полный DOM. – gradusas

+0

Знаете ли вы, что конкретная страница, на которой он работает, динамически строит кнопки после завершения загрузки DOM? Любая удача воспроизводит ошибку или регистрирует результат селектора перед вызовом innerText на результат? – chinabuffet

+0

Хорошая идея. Я попытаюсь выполнить вывод 'console.log', прежде чем перейти к' if' statement завтра. – gradusas

 Смежные вопросы

  • Нет связанных вопросов^_^