我试图从URL中获取输入框的值。我似乎在执行XPath时遇到了问题。PHP使用XPath刮 - html5问题?
被刮下的页面看起来像:
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<div><span>Blah</span></div>
<div><span>Blah</span> Blah</div>
<div>
<form method="POST" action="blah">
<input name="SomeName" id="SomeId" value="GET ME"/>
<input type="hidden" name="csrfToken" value="ajax:3575644127378754050" id="csrfToken-login">
</form>
</div>
</body>
</html>
,我尝试分析它是这样的:
$Contents = file_get_contents("https://www.linkedin.com/uas/login");
$Selector = "//input[@id='csrfToken-login']/@value";
print_r($Selector);
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHtml($Contents);
$xpath = new DOMXPath($dom);
libxml_use_internal_errors(false);
print_r($xpath->query($Selector));
NB:dump()
只是包装print_r()
,但增加了一些堆栈跟踪信息和格式。
输出是folllowws:
14:50:08 scraper.php 181: (Scraper->Test)
//input[@id='csrfToken-login']/@value
14:50:08 scraper.php 188: (Scraper->Test)
DOMNodeList Object
(
)
这我假设意味着它无法找到它我选择相匹配的文件中什么?我已经尝试了一些变化,仅仅指刚看我是否能得到东西回:
/input/@value
/input
//input
/div
,我已经能够得到什么唯一的选择是从哪个/
返回整个文档。
我在做什么错?
编辑:由于有些不能重现旧示例的问题,我用几乎相同的示例代替了它,它也演示了问题,但使用了公共URL(LinkedIn登录页面)。
有人建议,这是不可能的,因为HTML5上的解析器窒息 - (如同内部页面)任何人都有这方面的经验?
你不能转储任何DOM实例。他们不暴露他们的财产。即使你使用了正确的XPath'// input [@ id ='SomeId']/@ value',dump()结果也会显示相同的空对象(尽管项目在那里)。 – Gordon 2012-02-17 14:00:39
@Gordon谢谢 - 不知道那个... – Basic 2012-02-17 14:47:34
我编辑了Q以包含使用LinkedIn登录页面的“工作”示例。 – Basic 2012-02-17 14:51:48