0

美好的一天。

我有这个链接

如果我在吹风机中打开链接,我会看到窗口 测试

我想获取 id 为 TarifValue 的 html 元素

为此我使用代码:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.russianpost.ru/autotarif/Autotarif.aspx?viewPost=26&countryCode=643&typePost=1&viewPostName=undefined&countryCodeName=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%B0%D1%8F%20%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F&typePostName=undefined&weight=1100&value1=2650&postOfficeId=123456');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch);

curl_close($ch);

echo $output显示下一个代码:

<html>
<head></head>
<body onload="document.myform.submit();">
<form method="post" name="myform" style="visibility:hidden;"><input id="key" name="key" value="497947">
<input type="submit">
</form>
</body>
</html>

请告诉我,当我需要时如何正确获取 html?

4

2 回答 2

0

你可以试试这个解析器http://simplehtmldom.sourceforge.net/。迄今为止我发现的最好的之一。

$html = file_get_html("http://www.russianpost.ru/autotarif/Autotarif.aspx?viewPost=26&countryCode=643&typePost=1&viewPostName=undefined&countryCodeName=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%B0%D1%8F%20%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F&typePostName=undefined&weight=1100&value1=2650&postOfficeId=123456");

echo $html->find("#TarifValue", 0).textContent;
于 2013-07-11T06:38:14.120 回答
0

该页面的内容正在使用表单中的代码动态加载。因此,要获取 HTML,您必须使用正确的代码提交表单。

我运行了以下代码:

$dom = new DOMDocument();
@$dom->load("http://www.russianpost.ru/autotarif/Autotarif.aspx?viewPost=26&countryCode=643&typePost=1&viewPostName=undefined&countryCodeName=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%B0%D1%8F%20%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F&typePostName=undefined&weight=1100&value1=2650&postOfficeId=123456");
echo $this->to_html($dom->saveHTML());

输出是:

<html>
<head></head>
<body onload="document.myform.submit();"><form method="post" name="myform" style="visibility:hidden;">
<input id="key" name="key" value="675356"><input type="submit">
</form></body>
</html>

它看起来像是一种安全措施,每次都会生成代码。为了获得您想要的 HTML,您可以使用 cURL 通过 post 方法传递表单数据。但要做到这一点,您需要发送正确的代码。

于 2013-07-11T06:42:56.593 回答