php - XPath 特定表达式 WebDriver 错误
问题描述
我对 WebDriver 的 XPath 有一个问题,即使它是正确的,它也会返回一个错误表达式。
表达式为:
(*//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>
预期结果:
- Hollyoak Hector (v Courts Ad Darcey)
- 陷阱 8
并在网站上进行了测试:http: //xpather.com/
返回的错误是:
致命错误:未捕获的 Facebook\WebDriver\Exception\InvalidSelectorException:无效选择器:由于以下错误,无法找到具有 xpath 表达式 THIS_EXPRESSION 的元素:SyntaxError:无法在“文档”上执行“评估”:字符串 THIS_EXPRESSION 不是有效的 XPath 表达式。.... 在第 152 行的 DIR/vendor/facebook/webdriver/lib/Exception/WebDriverException.php
怎么了?为什么它不能在 WebDriver 的 Xpath 中工作而在这个站点上工作?这是处理这些数据的最佳方式吗?
解决方案
您的 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']
所以复制表达式的第一部分,然后在两个表达式上应用并集。
推荐阅读
- r - 如何制作显示 p 值且轴部分斜体的相关矩阵
- mysql - MySQL JOIN:仅在第一次出现时打印左表行
- c# - 如何正确配置依赖项
- android - 如何在 Firebase Firestore 中不为 Flutter 保存 equals String
- r - 如何在使用 R 的每个观察中不出现的另一列中基于字符串 grep 组?
- gitlab-ci - 如何在 Gitlab CI 中捕获结构化的 xUnit 测试输出?
- python - 如何更改日期格式?
- junit - 由于 java.lang.StackOverflowError,Junit 失败
- flatpickr - Flatpickr:在触发 onValueUpdate 时启用按功能禁用的日期
- intellij-idea - 在 sbt 项目中更改 intellij idea 中的 xxx-sources.jar 下载目录