2

だから私はオンラインゲームで私のためにタイルを配置するためのグリースモンキースクリプトを書こうとしています。配置タイルを把握しましたが、スクリプトを拡張するには、ループを移動回数に制限する必要があります。ページのhtmlからこの情報を抽出する最良の方法がわかりません。

<h2>5</h2>Level:<font size="4px" color="red"> 1455</font><br><br>Moves:<font size="4px" color="red"> 0</font><br>Total:<font size="4px" color="red"> 688</font><br><br><a href="logout.php">

私はこの獣に取り組む方法についての指針を探しています。正規表現?

編集:このdivの完全なコードは

   <div id="info">



<img src="images/mmosbg_title.png" onclick = "getinfo('boardinfo.php', 'info')"; height="48" width="138" border="0"><br><br><a href="board5.php?size=5&border=0"><img src="boxes/990000.gif" border="0" width="5 px" height="5 px" onmouseover="Tip('Micro Board Size', BGCOLOR, '#FFCC00', WIDTH, -200, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><a href="board5.php?size=10&border=0"><img src="boxes/990000.gif" border="0" width="10 px" height="10 px" onmouseover="Tip('Small Board Size', BGCOLOR, '#FFCC00', WIDTH, -200, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><a href="board5.php?size=16"><img src="boxes/990000.gif" border="0" width="16 px" height="16 px" onmouseover="Tip('Medium Board Size', BGCOLOR, '#FFCC00', WIDTH, -200, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><a href="board5.php?size=32"><img src="boxes/990000.gif" border="0" width="32 px" height="32 px" onmouseover="Tip('Large Board Size', BGCOLOR, '#FFCC00', WIDTH, -200, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><h2>5</h2>Level:<font size="4px" color="red"> 1455</font><br><br>Moves:<font size="4px" color="red"> 0</font><br>Total:<font size="4px" color="red"> 688</font><br><br><a href="logout.php"><img src="images/logout.png" border="0" onmouseover="Tip('Logout', BGCOLOR, '#FFCC00', WIDTH, -200, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><a href="history.php"><img src="images/pastwinners.png" border="0" onmouseover="Tip('Past Winners', BGCOLOR, '#FFCC00', WIDTH, -200, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><br><br><font color="red" font="5px">Current Rankings</font><img src="images/questionsmall.png" onmouseover="Tip('Current Rankings<br>(rank)(name)(total)(moves)', BGCOLOR, '#FFCC00', WIDTH, -300, OPACITY, 95, SHADOW, true, SHADOWWIDTH, 7)" onmouseout="UnTip()"></a><br><br><font color="red">1530</font> of 1600 (96 %)<br><br>1 <font color="red">iannis5</font> <font color="red">795</font> <font color="black">292</font><br><img src="boxes/0000CD.gif" width="16" height="16" ><br>2 <font color="black">5</font> <font color="red">688</font> <font color="black">0</font><br><img src="boxes/990000.gif" width="16" height="16" ><br>3 <font color="darkred">yellowfestiva5</font> <font color="red">47</font> <font color="black">6</font><br><img src="boxes/FFDAB9.gif" width="16" height="16" ><br>
</div>

それは私が知っている醜いです。

4

1 に答える 1

1

質問の HTML は、疑わしいほど不正で不完全に見えます。そのすべてを含むノードは何ですか?

とにかく、貧弱な HTML から情報を抽出するには、blunt-force regex を使用して迅速かつ汚い解決策を得ることができます。

var moves       = 0;

var movesMatch  = document.body.textContent.match (/Moves:\s*(\d+)(?:\D)/);
if (movesMatch  &&  movesMatch.length > 1) {
    moves       = parseInt (movesMatch[1], 10);
}
console.log ("The number of moves left is: ", moves);

この場合はうまくいくかもしれませんが、最も単純なページを除いて、脆弱です (間違った情報を「見つける」可能性があります)。


最善のプロセスは、DOM 手法を使用してテキストを可能な限り絞り込むことです。

  1. 可能であれば、理想的には必要な情報を含む、または安定した方法でその近くにある、一意で耐久性のあるノードを特定します。

    id属性 (最適)、class名前 (良い)、または属性 (問題ない)を探します。必要な情報への適切な「CSS パス」を取得する必要があります。querySelectorこれは、または jQueryにフィードできます。Firebug は生の CSS パスを提供することに注意してください。これを開始点として使用できます。

    たとえば、次のような HTML の場合:

    <div id="dress-sizes">
        <ul>
            <li>
                <span class="dSize" data-color="green">13</span>
            </li>
            <li>
                <span class="dSize" data-color="green">8</span>
            </li>
        </ul>
    </div>
    

    緑のドレスのサイズを見つけるのに適したセレクターは次のとおりです。

    "#dress-sizes ul li span.dSize[data-color='green']"
    
  2. 適切な CSS パスが見つからない場合は、XPath にフォールバックする必要がある場合があります (firebug または Chrome が提供します)。しかし、私はそれを一度だけしなければなりませんでした

  3. 正確なノード (理想)、または親ノード、または信頼できる兄弟ノードを選択する適切な方法を見つけたら、次のようにします。正規表現でフィルタリングする余分な作業がはるかに少なくなります (またはまったくありません)。これにより、誤ヒットの可能性が減少します。


この場合、指定された唯一のユニークなノードはログアウトリンク<a href="logout.php">です。これは耐久性がありそうです。つまり、サイトが変更されても大きく変わる可能性は低いです。ただし、複数のログアウト リンクがある場合があります。

そのノードをキーオフすると、これがこれまでに与えられた HTML で実行できる最善の方法です。

var anchorNode  = document.querySelector ("a[href='logout.php']");
var siblingText = anchorNode.parentNode.textContent;
var moves       = 0;

var movesMatch  = siblingText.match (/Moves:\s*(\d+)(?:\D)/);
if (movesMatch  &&  movesMatch.length > 1) {
    moves       = parseInt (movesMatch[1], 10);
}
console.log ("The number of moves left is: ", moves);


更新: コンテナーがわかっているので、適切に ,idを使用します。

var containerNode   = document.querySelector ("#info");
var siblingText     = containerNode.textContent;
var moves           = 0;

var movesMatch      = siblingText.match (/Moves:\s*(\d+)(?:\D)/);
if (movesMatch  &&  movesMatch.length > 1) {
    moves           = parseInt (movesMatch[1], 10);
}
console.log ("The number of moves left is: ", moves);
于 2013-02-25T10:26:09.443 に答える