【问题标题】:Scraping AJAX based value php抓取基于 AJAX 的值 php
【发布时间】:2015-07-08 22:40:11
【问题描述】:

我试图从中获取信息的部分html代码如下

<div class="price">15</div>

表格的一部分是

<select name="group_1" id="group_1" class="attribute_select" onchange="findCombination();getProductAttribute();$('#wrapResetImages').show('slow');;">
    <option value="1" selected="selected" title="1">1</option>
    <option value="4" title="5">5</option>
</select>

现在,当您将选择从 1 更改为 4 时,div 中的价格会随着链接 www.domain.com/product.html/ 更改为 www.domain.com/product.html#/in-pack-5 而更改。问题是 DOMDocument、loadHTML、DOMXPath 的组合似乎无法识别链接中的“#/in-pack-5”,并且即使我强制将“selected”设置为 value="4",也会继续抓取默认价格。

我怎样才能读到第二个价格呢?我卡住了,请有任何想法。如果问题已经被问到,我想道歉 - 我一直在寻找答案,但无法在任何地方找到它或无法正确形成问题。

提前致谢


编辑

好吧,似乎内容(第二个价格)是由 AJAX 加载的,我告诉我使用下面的链接通过 php 脚本重现它,但不知道如何实现这一点

请求网址:https://domain.com//modules/paypal/express_checkout/ajax.php?get_qty=1&id_product=358&id_product_attribute=625&_=1436461450437

任何帮助将不胜感激

【问题讨论】:

    标签: javascript php ajax domdocument domxpath


    【解决方案1】:

    我发现我可以遍历选项值并通过回显 javascript 代码来更改它们,这适用于获取值甚至更改选择表单的状态。比我想回应 onchange();但这不起作用。如何通过回显 javascript 代码通过 php 在选择表单上强制 onchange()?

    我试过了

    echo '<script type="text/javascript">
        var select = document.getElementById("group_1");        
        var option = select.getElementsByTagName("option");
        for(j=0; j < option.length; j++){
            option[j].removeAttribute("selected");
        }
        option['.$i.'].setAttribute("selected","selected");
        select.onchange();
    
    </script>';
    

    在控制台中工作,但不能通过 php 回显

    【讨论】:

      【解决方案2】:
      <?php
      $url="https://domain.com//modules/paypal/express_checkout/ajax.php?get_qty=1&id_product=358&id_product_attribute=625&_=1436461450437";
      //this line needs PHP 5.4.0+ but poster need something 5.3 compatible. $query=parse_url($url)['query'];
      $query=parse_url($url);
      $query=$query['query'];//for 5.3- compat.
      $data=array();
      parse_str($query,$data);
      var_dump($data);
      

      编辑:wups,原来的答案只是它的一半:p

      【讨论】:

      • 谢谢,但那给了我空白页
      • 您运行的是什么版本的 PHP?一些古老的版本?另外,确保 php.ini 中的 error_reporting = E_ALL ;应该给你一个错误,告诉你问题是什么,而不是“空白页”
      • php 版本 5.3.16。我无权访问 php.ini,但 error_reporting = 22527 这意味着几乎所有内容都打开了。但即使我在代码上方包含 error_reporting(E_ALL) 或 error_reporting(-1) 或 ini_set('error_reporting', E_ALL) ,它仍然会给我空白页。
      • 感谢您,但不幸的是,我刚刚意识到我无法使用它,因为 $url 是通过更改选择选项动态创建的。所以我正在寻找不同的解决方案。
      • 我现在要做的是在 php 中读取“选项”值并将它们推送到数组,而不是 for 循环生成 javascript 代码: nodeValue; } } ?>
      猜你喜欢
      • 2022-11-12
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      相关资源
      最近更新 更多