4

特定のページで問題が発生していることを除いて、正常に動作しているCapybaraでWebページをスクレイプしようとしています。次の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/または/Pat/または/Lisa/アイテムを選択する方法はありますか?どのリテラル文字列がこれらのハイフンの周りの不思議な空白に一致するかを推測するよりも確かに簡単です。

4

1 に答える 1

0

あなたの問題は、ハイフンの周りに空白ない可能性があります。は&nbsp;、ブラウザで表示される場合は非改行スペース文字ですが、スクリーン スクレーパーで読み取る場合は 6 文字です。" &nbsp;"。

これは、スクリーン スクレーパーと一致させようとする場合、レンダリングされたバージョンではなく、HTML と一致させようとする必要があることを意味します。

あなたのカットアンドペーストから 2 番目に気付いたのは、それらの周りにタブ文字があることです。RegEx では、タブとスペースは両方とも\sセレクターを使用して照合されます。

この正規表現を最初に試してください。

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

これは、「Investment」または「Patrick」または「Lisa」という単語に一致することから始まります - 次に、任意の量の空白 (スペース、タブなど) - 次に、リテラル " "、ダッシュ、リテラル " "、任意の量再びスペース、次に 0 ~ 9 の 4 桁の数字。

注: この正規表現はテストしていません。ただし、構築するための良い出発点となるはずです。調整にさらにヘルプが必要な場合は、 Regular-Expressions.infoをお勧めします。

于 2012-12-04T00:20:30.777 に答える