4

我正在尝试使用 Capybara 抓取一个网页,它工作正常,除了我在某个页面上遇到问题。它有一个使用以下 HTML 定义的下拉列表:

<select onChange="this.form.submit();" id="AcctNumber" name="AcctNum">
<option value="MU:P2" selected="true">Investment &nbsp;-&nbsp;2845</option>
<option value="MU:P0">Patrick UGMA&nbsp;-&nbsp;1585</option>
<option value="MU:P1">Lisa UGMA&nbsp;-&nbsp;1655</option>

我试图选择一个在这个主题上有很多变化的值

selector = 'Investment - 2845'
selector = 'Investment &nbsp;-&nbsp; 2845'
selector = 'Investment    &nbsp;-&nbsp;   2845'
select selector, :from => "AcctNumber"

所有这些(以及更多)都会产生ElementNotFound错误。

有没有办法只使用正则表达式,比如/Invest/or/Pat//Lisa/选择项目?这肯定比试图猜测什么文字字符串会匹配那些连字符周围的神秘空白更容易。

4

1 回答 1

0

您的问题可能连字符周围没有空格。在&nbsp;浏览器中呈现时,它是一个不间断的空格字符 - 但当被屏幕抓取器读取时,它是 6 个字符。“ &nbsp;”。

这意味着当您尝试将其与屏幕抓取器匹配时,您可能应该尝试匹配 HTML,而不是呈现的版本。

我从您的剪切粘贴中注意到的第二件事是它们周围有制表符。RegEx 中的制表符和空格都使用\s选择器进行匹配。

试试这个 RegEx 作为开始:

(Investment|Patrick|Lisa)[\s]*(&nbsp;)[-](&nbsp;)[\s]*[0-9](,4)

首先匹配单词“Investment”或“Patrick”或“Lisa”——然后是任意数量的空格(空格、制表符等)——然后是文字“”,破折号,再次是文字“”,任意数量再次空格,然后是 4 位数字 0-9。

注意: 我没有测试过这个 RegEx。但是,它应该为您提供一个良好的构建起点。如果您需要更多帮助来调整它,我建议您使用 Regular-Expressions.info 。

于 2012-12-04T00:20:30.777 回答