XPath Specific Expression WebDriver Ошибка - PullRequest
1 голос
/ 02 ноября 2019

У меня проблема с XPath WebDriver, которая, даже если она верна, возвращает выражение ошибки.

Выражение:

(*//div[contains(@class, 'myb-SettledBetItem ') or contains(@class, 'myb-OpenBetItem_Collapsed') or contains(@class, 'myb-OpenBetItem ')]//(span[@class='myb-SettledBetParticipant_ParticipantSpan ' or @class='myb-OpenBetParticipant_ParticipantSpan']|div[@class='myb-SettledBetItem_SubHeaderText']))

HTMLэто:

<div class="myb-BetItemsContainer_BetItemsContainer ">
    <div class="myb-SettledBetItem ">
        <div class="myb-SettledBetItemHeader ">
            <div class="myb-SettledBetItemHeader_HeaderTextContainer ">
                <div class="myb-SettledBetItemHeader_Title ">
                    <div class="myb-SettledBetItemHeader_Text ">R$0,50 Simples</div>
                </div>
                <div class="myb-SettledBetItem_SubHeaderText "></div>
            </div>
            <div class="myb-SettledBetItem_BetStateContainer ">
                <div class="myb-SettledBetItem_BetStateLabel ">Retorno Obtido</div>
                <div class="myb-SettledBetItem_BetReturnLabel ">R$1,19</div>
            </div>
        </div>
        <div>
            <div>
                <div class="myb-SettledBetParticipant-FirstOfType myb-SettledBetParticipant myb-SettledBetParticipant_Won ">
                    <div class="myb-SettledBetParticipant_Header ">
                        <div class="myb-SettledBetParticipant_HeaderTitle ">
                            <div class="myb-SettledBetParticipant_HeaderText "><span class="myb-SettledBetParticipant_ParticipantSpan ">Hollyoak Hector (v Courts Ad Darcey) </span>
                                <div class="myb-HalfAndHalfPill myb-HalfAndHalfPill_Status-1 ">
                                    <div class="myb-HalfAndHalfPill_TextStatus myb-HalfAndHalfPill_TextStatus-1 ">
                                        <div class="myb-HalfAndHalfPill_TextStatusLHS myb-HalfAndHalfPill_TextStatusLHS-1 "></div>
                                        <div class="myb-HalfAndHalfPill_TextStatusRHS myb-HalfAndHalfPill_TextStatusRHS-1 "></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="myb-SettledBetParticipant_HeaderOdds ">2.37</div>
                    </div>
                    <div class="myb-SettledBetParticipant_MarketDescription ">Aposta Comparativa</div>
                    <div class="myb-SettledBetParticipant_FixtureDescription ">8.27 Central Park EVE (Corrida 8)</div>
                </div>
            </div>
            <div class="myb-SettledBetItemFooter ">
                <div class="myb-SettledBetItemFooter_BetInformation ">
                    <div class="myb-SettledBetItemFooter_StakeInformation ">
                        <div class="myb-SettledBetItemFooter_StakeLabel ">Aposta</div>
                        <div class="myb-SettledBetItemFooter_StakeTextWrapper "><span class="myb-SettledBetItemFooter_StakeTextCurrency myb-SettledBetItemFooter_StakeTextCurrency-formatted ">R$</span><span class="myb-SettledBetItemFooter_StakeText ">0,50</span></div>
                    </div>
                    <div class="myb-SettledBetItemFooter_ReturnInformation ">
                        <div class="myb-SettledBetItemFooter_ReturnLabel ">Retorno Total</div>
                        <div class="myb-SettledBetItemFooter_ReturnTextWrapper "><span class="myb-SettledBetItemFooter_ReturnTextCurrency myb-SettledBetItemFooter_ReturnTextCurrency-formatted ">R$</span><span class="myb-SettledBetItemFooter_ReturnText ">1,19</span></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="myb-SettledBetItem ">
        <div class="myb-SettledBetItemHeader ">
            <div class="myb-SettledBetItemHeader_HeaderTextContainer ">
                <div class="myb-SettledBetItemHeader_Title ">
                    <div class="myb-SettledBetItemHeader_Text ">R$0,50 Simples</div>
                </div>
                <div class="myb-SettledBetItem_SubHeaderText "></div>
            </div>
            <div class="myb-SettledBetItem_BetStateContainer ">
                <div class="myb-SettledBetItem_BetStateLabel ">Retorno Obtido</div>
                <div class="myb-SettledBetItem_BetReturnLabel ">R$0,77</div>
            </div>
        </div>
        <div>
            <div>
                <div class="myb-SettledBetParticipant-FirstOfType myb-SettledBetParticipant myb-SettledBetParticipant_Won ">
                    <div class="myb-SettledBetParticipant_Header ">
                        <div class="myb-SettledBetParticipant_HeaderTitle ">
                            <div class="myb-SettledBetParticipant_HeaderText "><span class="myb-SettledBetParticipant_ParticipantSpan ">Trap 8 </span>
                                <div class="myb-HalfAndHalfPill myb-HalfAndHalfPill_Status-1 ">
                                    <div class="myb-HalfAndHalfPill_TextStatus myb-HalfAndHalfPill_TextStatus-1 ">
                                        <div class="myb-HalfAndHalfPill_TextStatusLHS myb-HalfAndHalfPill_TextStatusLHS-1 "></div>
                                        <div class="myb-HalfAndHalfPill_TextStatusRHS myb-HalfAndHalfPill_TextStatusRHS-1 "></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="myb-SettledBetParticipant_HeaderOdds ">1.53</div>
                    </div>
                    <div class="myb-SettledBetParticipant_MarketDescription ">Vencedor e V/C Ao-Vivo</div>
                    <div class="myb-SettledBetParticipant_FixtureDescription ">Race 15 Palm Beach</div>
                </div>
            </div>
            <div class="myb-SettledBetItemFooter ">
                <div class="myb-SettledBetItemFooter_BetInformation ">
                    <div class="myb-SettledBetItemFooter_StakeInformation ">
                        <div class="myb-SettledBetItemFooter_StakeLabel ">Aposta</div>
                        <div class="myb-SettledBetItemFooter_StakeTextWrapper "><span class="myb-SettledBetItemFooter_StakeTextCurrency myb-SettledBetItemFooter_StakeTextCurrency-formatted ">R$</span><span class="myb-SettledBetItemFooter_StakeText ">0,50</span></div>
                    </div>
                    <div class="myb-SettledBetItemFooter_ReturnInformation ">
                        <div class="myb-SettledBetItemFooter_ReturnLabel ">Retorno Total</div>
                        <div class="myb-SettledBetItemFooter_ReturnTextWrapper "><span class="myb-SettledBetItemFooter_ReturnTextCurrency myb-SettledBetItemFooter_ReturnTextCurrency-formatted ">R$</span><span class="myb-SettledBetItemFooter_ReturnText ">0,77</span></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Ожидаемый результат:

  1. Холлиоак Гектор (v Courts Ad Darcey)
  2. Ловушка 8

И былопроверено на сайте: http://xpather.com/

Возвращена ошибка:

Неустранимая ошибка: Uncaught Facebook \ WebDriver \ Exception \ InvalidSelectorException: неверный селектор: Невозможно найти элемент сВыражение xpath THIS_EXPRESSION из-за следующей ошибки: SyntaxError: Не удалось выполнить «оценку» для «Документа»: строка THIS_EXPRESSION не является допустимым выражением XPath. .... в DIR / vendor / facebook / webdriver / lib / Exception / WebDriverException.php в строке 152

Что происходит? Почему он не работает в Xpath WebDriver и работает на этом сайте? Это лучший способ обработать эти данные?

1 Ответ

0 голосов
/ 02 ноября 2019

Ваше выражение XPath работает только в XPath-2.0 или выше.
Чтобы заставить его работать в XPath-1.0, вам нужно разделить то, что вы пытались сделать, с помощью скобок:

//div[contains(@class, 'myb-SettledBetItem ') or contains(@class, 'myb-OpenBetItem_Collapsed') or contains(@class, 'myb-OpenBetItem ')]//span[@class='myb-SettledBetParticipant_ParticipantSpan ' or @class='myb-OpenBetParticipant_ParticipantSpan'] | //div[contains(@class, 'myb-SettledBetItem ') or contains(@class, 'myb-OpenBetItem_Collapsed') or contains(@class, 'myb-OpenBetItem ')]/div[@class='myb-SettledBetItem_SubHeaderText']

Поэтому дублируйте первую часть выражения и примените объединение к обоим выражениям.

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