如何在使用简单HTML Dom Parser进行分析之前登录Web窗体网站


How Can I Log Into a Web Forms Website Before Parsing with Simple HTML Dom Parser?

以下是我正在努力实现的目标:

我需要从这个网站上抓取产品数据,但当你登录时,价格不同。因此,我需要提交这个登录表单(通过php),然后使用Simple HTML DOM Parser来抓取产品数据。

我发现了以下类似的帖子:

  • 简单HTML DOM解析器-发送post变量
  • 使用curl授权并使用简单的html-dom解析不起作用
  • 在使用PHP Simple HTML DOM Parser之前登录ASP网站
  • 使用数组处理HTTP Post(无cURL)
  • 使用PHP&卷曲以登录我的网站表单
  • php curl脚本获取aspx页面';s内容
  • https://davidwalsh.name/curl-post

然而,没有一个答案允许我登录并在登录以下网站时继续刮:https://www.bestlinknetware.com/Account/LogOn

我尝试了什么

尝试#1

$data = http_build_query(array(
          "UserName" => "ourValidUsername",
          "Password" => "ourValidPassword"
        ));
send_message("<p>" . $data . "</p>");
$request = array(
  "http" => array(
    "header" => "Content-Type: application/x-www-form-urlencoded'r'n".
                "Content-Length: " . strlen($data) . "'r'n".
                "User-Agent:MyAgent/1.0'r'n",
    "method" => "POST",
    "content" => $data
  )
);
$context = stream_context_create($request);
$html = file_get_contents( $crawl["url"] . "/Account/LogOn", false, $context, -1, 40000 );
echo $html;

尝试#2

$url = "https://www.bestlinknetware.com/Account/LogOn"; 
$cookie="cookie.txt"; 
$data = array(
  "UserName" => "ourValidUsername",
  "Password" => "ourValidPassword"
);
$postData = http_build_query($data);
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/4");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt ($ch, CURLOPT_POST, 2);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postData);
$result = curl_exec ($ch);
echo $result;  
curl_close($ch);

上述两次尝试(似乎)都没有结果。页面只显示了登录表单…我不知道登录尝试是否失败,或者我是否需要做一些类似的事情(在cURL POST之后),添加$html = file_get_html("http://www.bestlinknetware.com/");并开始解析。。。

注意:当我简单地添加$html = file_Get_html("...")脚本时,我可以抓取网站,但我会得到常规(未登录)价格

任何有使用SimpleHTMLDOMParser经验的人都能了解如何正确地将POST数据提交到这样的登录表单中,然后将登录后的HTML加载到SimpleHTMLDOM Parser对象中(这样我就可以抓取它了)吗?

试试这个。

include('simple_html_dom.php');
$context = stream_context_create(array('http' => array('header' => 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17')));
$html = str_get_html( file_get_contents('http://page.com/user1', false, $context) );