VBA не может получить элемент привязки в таблице?

0

Я пытаюсь щелкнуть элемент привязки на веб-странице. Я использую этот код:

 For each anchor in HTMLDoc.anchors
      If anchor.onclick = "validateForm(frmSearchEntry)" Then
           anchor.click
           exit for
      End if
 Next anchor

И вот фрагмент html:

<tr>
    <td height="35" align="right" nowrap>
    <input type="hidden" name="aisposm01formReset" value="">        
    <a href="#" onclick="return resetForm(frmSearchEntry)"><img src="/Settlement/static/images/pbs/funcreset.gif" border="0"></a>&nbsp;&nbsp;
    <a href="#" onclick="validateForm(frmSearchEntry)"><img src="/Settlement/static/images/pbs/funcsearch.gif" border="0" alt=""></a></td>
    </tr>
    <tr>
       <td valign="bottom" nowrap>
         <table>
            <tr><td name="txtErrorMessage" class="error"></td></tr>
         </table>
       </td>
</tr>

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

Теги:
dom

1 ответ

0

Обновлено, чтобы отразить ответ на вопрос, отмеченный в комментариях

Элементы, которые вы пытаетесь найти, на самом деле не являются якорями. См. Эту ссылку для описания того, как анкеры реализованы в html. Якорь выглядит как <a name="anchor"></a> и вы создали бы ссылку на него так <a href="#anchor">click here</a>.

Вместо этого я мог бы использовать HTMLDoc.GetElementsByTagName("A") чтобы получить все ссылки, а затем повторить их. Убедитесь, что вы выполнили проверку на .getAttribute функции .getAttribute как указано ниже.


Функция .OnClick возвращает указатель на функцию обработки событий на msdn. Вместо этого вы, скорее всего, захотите: .getAttribute(strAttributeName As String, Optional lFlags As Long) (msdn).

Попробуйте (UNTESTED):

For each linkelement in HTMLDoc.GetElementsByTagName("a")   'As noted above
      If linkelement.getAttribute("OnClick") = "validateForm(frmSearchEntry)" Then
           linkelement.click
           exit for
      End if
Next anchor

Если это не сработает сразу, поместите контрольную anchor.getAttribute("OnClick") в оператор If и проверьте значение anchor.getAttribute("OnClick") в окне просмотра.

  • 0
    Возможно, мне потребуется опубликовать больше HTML-кода, и мне жаль, что я не прояснил это в первом вопросе, но макрос даже не входит в цикл. Когда он попадает в строку «Для каждого», он просто пролетает мимо нее, как если бы в документе HTML не было якорных элементов. Итак, насколько я ценю ваши предложения, и они могут пригодиться, чтобы заставить работать клик, мне все равно нужно, чтобы он действительно распознал этот тег в первую очередь. Возможно, мне просто придется пройтись по всем ячейкам на странице ... да ... тогда я мог бы попробовать ваше предложение. Мог бы просто получить это. Я должен доложить завтра.
  • 0
    Ах, я вижу - я читаю "летит прямо за следующим циклом", чтобы означать "летит прямо через ...". Я попытаюсь взглянуть еще раз, когда у меня будет время, и соответственно обновлю ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню