1

JavaScript を使用して内部コンテンツを更新するページを解析しようとしています。Firebug で html を見ると、次のようになります。

<div id="productinfo">
<h2>
<span id="productname">Computer</span>
</h2>
<span id="servieidLabel" style=""> Service ID: </span>
<span id="snLabel" style="display: none"> Serial Number: </span>
<span id="servidno">12345ABCD</span>

ただし、ページを右クリックしてソースを表示すると、以下が html の構造です。

<div id="productinfo">
<h2><span id="productname"></span></h2>
<span id="serviceidLabel" style="display: none"> 
Service ID:  
</span> 
<span id="snLabel" style="display: none">
Serial Number: 
</span> 
<span id="servidno"></span><br>

javascript:
warrantyPage.warrantycheck.displayProductInfo('Computer', true,'12345ABCD', false, '');

Service ID: 12345ABCDのような出力を解析して取得しようとしています。Plsはそれについてどうやって私を助けてくれますか。明らかにサービスID番号はhtmlの一部ではなく、javascriptによって挿入されるため、結果なしで以下のコードを試しました

$servid = $xpath->query("//span[@id='servidno']");
foreach ($servid as $entry) {
echo "Service Id No:" ,$entry->nodeValue."<br />";
}
4

1 に答える 1

0

JavaScript の入力関数が常に同じパラメーターの順序を持​​っている場合は、解析を試みることができます。

$text = "warrantyPage.warrantycheck.displayProductInfo('Computer', true,'12345ABCD', false, '');";

preg_match_all('/\'[^\']+\'/', $text, $result);

print_r($result);

結果は配列になります。

Array
(
    [0] => Array
        (
            [0] => 'Computer'
            [1] => '12345ABCD'
        )
)

正規表現を使用しない別の方法:

    $text = "warrantyPage.warrantycheck.displayProductInfo('Computer', true,'12345ABCD', false, '');";

    $tail = substr($text, strpos($text, "displayProductInfo(") + 19 , -1);

    $head = strstr($tail, ")", true);

    $args = explode(',', $head);

$args は配列になります。

Array
(
    [0] => 'Computer'
    [1] =>  true
    [2] => '12345ABCD'
    [3] =>  false
    [4] =>  ''
)  
于 2013-02-03T17:37:46.480 に答える