【问题标题】:Retrieve variable inside script tag with xpath query使用 xpath 查询检索脚本标签内的变量
【发布时间】:2020-05-02 13:50:18
【问题描述】:

我正在尝试使用 xpath 查询检索脚本标记内的变量 (vin=5J8TC2H69KL805815) 以进行练习。 脚本如下所示:

<script type="text/javascript">
        var enterprise_id = 6731892;
        var dealertrackSettings = {"LowestPaymentWidgetParameters":"prtnr=EDLR&pdid=&jrr=9Z8758kQMpewxBhu8abpaBXX&lang=en&zip=T4R2N7&vin=5J8TC2H69KL805815&acode=CAC90ACS121C0&yr=2019&mk=Acura&model=RDX&style=SUV&trim=A-Spec&cond=U&kms=14,709&cp=52365&msrp=52365&hash=f8842e17a06af7c979d16db0980afbec28c808617e80db2260364c37235b9b25&pkg=&disp=2.0L&opt=&trans=AT&drv=All Wheel Drive&fuelType=Gasoline&eng=2.0L 4cyl&mcode=","DigitalRetailingWidgetParameters":"?flow=full&token=df387c15-9b3d-4694-b06f-fccdfbc8a437&lang=en&prtnr=EDLR&pdid=&zip=T4R2N7&vin=5J8TC2H69KL805815&msrp=52365&cp=52365&asst=AU&cond=U&yr=2019&mk=Acura&model=RDX&style=SUV&trim=A-Spec&tab=TRADE&jrr=9Z8758kQMpewxBhu8abpaBXX&hash=f8842e17a06af7c979d16db0980afbec28c808617e80db2260364c37235b9b25&kms=14,709&acode=CAC90ACS121C0&pkg=&disp=2.0L&opt=&trans=AT&drv=All Wheel Drive&fuelType=Gasoline&eng=2.0L 4cyl&mcode=","LowestPaymentWidgetAPIJson":null,"useUAT":false,"Domain":"https:\/\/digital.dealertrack.ca","displayAFFCTAUsed":true,"displayStructureMyDealCTAUsed":true,"structureMyDealBackgroundUsed":null,"displayFinancePrequalifyCTAUsed":true,"drivetrainMap":{"FRONT WHEEL DRIVE":"FWD","REAR WHEEL DRIVE":"RWD","AWD EXT":"AWD","N\/A":""},"transmissionMap":{"AUTOMATIC":"AT","MANUAL":"MT","OTHER":""}};
    </script>

我像这样和这样缩小了脚本标签中的文本 带回文本。

//script[contains(text(), 'dealertrackSettings')]/text()

但是从这里我对如何进行有点困惑。任何建议表示赞赏。塔恩克斯

编辑:我正在尝试在 php 中执行此操作

【问题讨论】:

    标签: javascript php html xml xpath


    【解决方案1】:

    您的 XPath 应该能够获取脚本内容,我使用了 evaluate(),因为它只是您想要的字符串。然后我使用了regex() 来提取vin=... 部分。

    $doc = new DOMDocument();
    $doc->loadHTML($html);
    
    $xp = new DOMXPath($doc);
    
    $script = $xp->evaluate("string(//script[contains(text(), 'dealertrackSettings')]/text())");
    if ( preg_match("/(vin=\w*)/", $script, $matches) ) {
        echo $matches[0];
    }
    

    给了

    vin=5J8TC2H69KL805815
    

    如果您只想要该值,请将正则表达式更改为 /vin=(\w*)/,这只会捕获该值,而不是 vin= 部分。

    5J8TC2H69KL805815
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多