PHP模拟登录抓内容绕过滑动验证码,实现零难度爬虫

优采云 发布时间: 2023-04-11 05:08

  很多网站为了保证用户安全,都会设置滑动验证码来验证用户身份。但是对于一些需要自动化操作的场景,如爬虫、数据采集等,如何绕过滑动验证码成为了一个难题。本文将介绍如何使用PHP模拟登录并抓取内容,同时绕过滑动验证码的方法。

  一、概述

  本文将介绍使用PHP模拟登录并抓取内容的基本流程以及如何绕过滑动验证码。具体包括以下9个方面:

  1.获取登录页面

  2.提交登录表单

  3.验证登录是否成功

  4.获取需要抓取的页面

  5.解析页面内容

  6.绕过普通验证码

  7.分析滑动验证码

  

  8.模拟滑动行为

  9.抓取目标数据

  二、获取登录页面

  要进行模拟登录首先需要获取目标网站的登录页面。可以使用curl库或者file_get_contents函数来获取页面内容。例如:

  php

$url ='https://www.example.com/login';

$html = file_get_contents($url);

  三、提交登录表单

  获取到登录页面后,需要提取出表单中的参数,并按照要求进行填写和提交。其中最重要的是账号和密码两个参数。如果有其他的参数需要填写,则也需要在此步骤中处理。例如:

  php

$url ='https://www.example.com/login';

$username ='your_username';

$password ='your_password';

$postData =[

'username'=>$username,

'password'=>$password,

//其他需要提交的参数

];

$options =[

'http'=>[

'method'=>'POST',

'header'=>"Content-Type: application/x-www-form-urlencoded\r\n",

'content'=> http_build_query($postData),

],

];

$context = stream_context_create($options);

$result = file_get_contents($url, false,$context);

  四、验证登录是否成功

  

  提交登录表单后,需要验证登录是否成功。可以通过判断返回页面中是否包含某些特定的元素来进行验证。例如:

  php

$url ='https://www.example.com/home';

$loggedInHtml = file_get_contents($url);

if (strpos($loggedInHtml,'Welcome')!== false){

echo "登录成功!";

} else {

echo "登录失败!";

}

  五、获取需要抓取的页面

  如果登录成功,则可以获取需要抓取的页面。如果需要抓取多个页面,则需要在此步骤中处理。例如:

  php

$url ='https://www.example.com/data';

$dataHtml = file_get_contents($url);

  六、解析页面内容

  获取到页面内容后,需要对其进行解析,提取出目标数据。可以使用正则表达式、DOM解析器等方式进行解析。例如:

  php

preg_match('/<div class="data">(.*)<\/div>/',$dataHtml,$matches);

$data =$matches[1];

echo $data;

  七、绕过普通验证码

  

  有些网站可能会设置普通验证码,需要在模拟登录时进行绕过。可以使用第三方库或者手动输入验证码来解决。例如:

  php

$url ='https://www.example.com/login';

$username ='your_username';

$password ='your_password';

$captcha ='captcha_code';//手动输入验证码

$postData =[

'username'=>$username,

'password'=>$password,

'captcha'=>$captcha,

];

$options =[

'http'=>[

'method'=>'POST',

'header'=>"Content-Type: application/x-www-form-urlencoded\r\n",

'content'=> http_build_query($postData),

],

];

$context = stream_context_create($options);

$result = file_get_contents($url, false,$context);

  八、分析滑动验证码

  如果目标网站设置了滑动验证码,则需要对其进行分析,并模拟用户的滑动行为。可以使用浏览器开发者工具来分析滑动验证码的实现方式。例如:

  html

<div class="slide-box">

<div class="slider"></div>

<span class="text">请按住滑块,拖动到最右边</span>

</div>

  九、模拟滑动行为

  分析完滑动验证码的实现方式后,可以使用Selenium、PhantomJS等工具来模拟用户的滑动行为。例如:

  php

require_once('vendor/autoload.php');

use Facebook\WebDriver\Remote\RemoteWebDriver;

use Facebook\WebDriver\WebDriverBy;

use Facebook\WebDriver\WebDriverExpectedCondition;

$driver = RemoteWebDriver::create($host,$capabilities,$timeout);

$driver->get('https://www.example.com/login');

$usernameField =$driver->findElement(WebDriverBy::name('username'));

$passwordField =$driver->findElement(WebDriverBy::name('password'));

$captchaField =$driver->findElement(WebDriverBy::name('captcha'));

$submitButton =$driver->findElement(WebDriverBy::cssSelector('.submit-btn'));

$usernameField->sendKeys('your_username');

$passwordField->sendKeys('your_password');

$captchaField->sendKeys('captcha_code');

$submitButton->click();

$slider =$driver->findElement(WebDriverBy::cssSelector('.slider'));

$sliderWidth =$slider->getSize()->getWidth();

$actions = new \Facebook\WebDriver\Interactions\WebDriverActions($driver);

$actions->clickAndHold($slider)

->moveByOffset($sliderWidth,0)

->release()

->perform();

  到此为止,我们已经完成了使用PHP模拟登录并抓取内容的整个流程,同时也绕过了滑动验证码的限制。希望本文对大家有所帮助。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线