我試圖從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