Internet Explorer xpath не находит элемент - PullRequest
0 голосов
/ 07 декабря 2011

Я пытаюсь найти элемент, расположенный по адресу

xpath = //html[1]/body[1]/div[1]/div[2]/div[1]/div[2]/p[1] 

В Firefox это работает, однако в Internet Explorer это не так.IE может найти элемент, но он находится на

//html[1]/body[1]/div[1]/div[1]/div[1]/div[2]/p[1] 

Я думаю, это может иметь смысл, учитывая, что они, вероятно, по-разному форматируют какой-то источник, моя проблема в том, что если я посмотрю на источник на странице IE, то мнепервый, который работает в FF, выглядит правильно.Если я помещу исходный код IE в FF, то Firefox найдет элемент в том месте, где я ожидаю.

У меня есть источник страницы, полученный от IE, который можно найти по адресу http://pastebin.com/Vg9J7cxn. Также включен источник из Firefox

Кто-нибудь знает, почему IE не может найтиэлемент?Я нахожу xpath, перебирая структуру dom, так кто-нибудь знает обходной путь, который я могу использовать, чтобы найти элементы в этих «IE» xpath в будущем?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Это то, что вы получаете, когда вы разделяете содержимое источника до структурных элементов:

<html>
    <head></head>
    <body>
        <div class='appOuterWrapper'>
            <div class='appHeaderContainer'>
                <div class='appHeader'>
                    <div class='appTop'>
                        <div class="appLogonOff"></div>
                    </div>
                    <div class="appCmsMenu">
                        <ul id="nav" class="top"></ul>
                        <div class="breadcrumbs">
                            <div class="crumbs"></div>
                            <div class="thedate"/>
                            <span/>
                        </div>
                        <script></script>
                    </div>
                </div>
            </div>
        </div>
        <div class="containerWrapper cmsContent">
            <div class="appWholePage appContent">
                <div class="home-sidebar"></div>
                <div class="page-body home-page-content"></div>
                <div class="containment"></div>
            </div>
        </div>
    </div><!-- <==== THIS IS INVALID -->
        <div class='appFooterContainer'>
            <div class='appFooter'>
                <span class='links'></span>
                <span class='copyright'></span>
            </div>
            <div class="TestAppitLink"></div>
        </div>
    </body>
</html>

Это одинаково в обеих версиях связанного источника.Обратите внимание на мой комментарий, который указывает на дополнительный конечный тег div:

</div><!-- <==== THIS IS INVALID -->

Если вы посмотрите, как мой анализатор отформатировал документ (на основе структуры выше), вы увидите, что естьнет элемента в:

/html[1]/body[1]/div[1]/div[2]

... потому что

/html[1]/body[1]/div[1]

... содержит только один div.(Другими словами, это согласуется с IE.)

Я предполагаю, что Firefox и IE обрабатывают это дерево ввода по-разному , пытаясь представить его также движку XPath.документ.

Опции :

  • Исправить исходный документ
  • Подход к выражению с использованием классов вместо позиции.Вы можете найти тот, который соответствует дереву в обоих браузерах.Например:

    /html/body/div[@class='appOuterWrapper']/<rest_of_expression>
    
0 голосов
/ 07 декабря 2011

Внутри первого элемента div (// html [1] / body [1] / div [1]) есть только один дочерний элемент div.Я не понимаю, как вы могли бы обратиться ко второму Div.

К какому классу div вы пытаетесь добраться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...