前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP高级爬虫实践|记一次失败的淘宝自动登录尝试

PHP高级爬虫实践|记一次失败的淘宝自动登录尝试

作者头像
猿哥
发布2019-07-25 23:14:57
2K0
发布2019-07-25 23:14:57
举报
文章被收录于专栏:Web技术布道师Web技术布道师

几句废话

笔者最近在逛sf.gg的时候,发现了一个关于每天“自动登录淘宝网站”的问题,很久没玩采集数据的我手有点痒痒,于是开始了自动登录淘宝网站的爬虫之旅。

一点介绍

下面的代码要实现自动登录淘宝手机网站,区别于通过 curl 等模拟请求的方式,笔者采用了 php-webdriver 自动化测试框架来模拟登录。

下面是采用 php-webdriver 的几个优点:

1)能够轻松处理复杂的SPA(single page application),这种应用一般通过js渲染生成的,http 请求和响应的 cookie 或者 header 可能会比较复杂;

2)完全模拟了用户的真实操作,大大降低了被反爬虫的可能;

3)代码更加简洁;

直接撸代码

代码语言:javascript
复制
<?phpnamespace Facebook\WebDriver;use Facebook\WebDriver\Chrome\ChromeOptions;use Facebook\WebDriver\Remote\DesiredCapabilities;use Facebook\WebDriver\Remote\RemoteWebDriver;//包含 composer 的自动加载require_once('vendor/autoload.php');//$host 是 selenium(一个 web 自动化测试框架)的 server 地址,用户自动化测试时的数据同步和 session (会话)管理$host = 'http://localhost:4444/wd/hub'; // this is the default//定义 chrome 驱动需要的功能集$capabilities = DesiredCapabilities::chrome();//创建一个 chrome 配置选项$chromeOptions = new ChromeOptions();//chromedriver 是用于直接跟 chrome 浏览器交互数据,设置 chromedriver 的位置$chromeOptions->setBinary("E:\\code\\php-webdriver-demos\\Tool\\chromedriver.exe");//给本次自动化测试的 chrome 驱动功能集中增加一个自定义的 chromeOptions 的配置$capabilities->setCapability(ChromeOptions::CAPABILITY,$chromeOptions->toCapabilities());//链接指定的 selenium host,并使用相关的功能集$driver = RemoteWebDriver::create($host, $capabilities, 5000);// 打开淘宝手机web端的登录网站$driver->get('https://login.m.taobao.com/login.htm');//增加真实登录时的cookie信息,添加成功之后同学们可以通过 chrome的开发者工具的application tab页查看cookie是否设置正确$cookie2 = new Cookie("cookie2","131eea94d7b3430c58580f00cd237b61");//设置cookie所属的域$cookie2->setDomain(".taobao.com");//把cookie设置到 chrome 驱动请求中$driver->manage()->addCookie($cookie2);$ctokenCookie = new Cookie("ctoken","L60jtYinmoPoCDYcISxVrhllor");$ctokenCookie->setDomain(".taobao.com");$driver->manage()->addCookie($ctokenCookie);$_tb_token_Cookie = new Cookie("_tb_token_","784e7be17350a");$_tb_token_Cookie->setDomain(".taobao.com");$driver->manage()->addCookie($_tb_token_Cookie);$encCookie = new Cookie("enc","yrYsvz83La8hQX826NzulzeG1ZwIFkaCADiYSz29aP8c02pTMxJehxANYa4aDb44F%2BrkWQrykmy%2BHFhUi6WuAA%3D%3D");$encCookie->setDomain(".taobao.com");$driver->manage()->addCookie($encCookie);//使用 id 来寻找指定的用户名输入框,并输入你的手机号码$driver->findElement(WebDriverBy::id("username"))->sendKeys("18588260233");//请填写你自己的淘宝真实手机号$driver->findElement(WebDriverBy::id("password"))->sendKeys("xiaosh211");//请填写你自己的淘宝真实密码//接着点击登录$driver->findElement(WebDriverBy::id("btn-submit"))->click();try{ //因为需要验证身份,淘宝弹出了“请点击下方的圆圈”的提示,类似验证码 //下面的 css 选择器直接使用了 chrome 浏览器的 copy css querySelector 的功能 $cssSelectorForVerifyBtn = "body > div.km-dialog.km-dialog-ios7.km-dialog-alert > div.km-dialog-buttons > span"; //最多等待10秒钟时间知道上面的确定按钮出现    $driver->wait(10)        ->until(            WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(                WebDriverBy::cssSelector($cssSelectorForVerifyBtn)            )        );//我们现在点击确定按钮,并开始下一步的点击圆圈操作    $driver->findElement(WebDriverBy::cssSelector($cssSelectorForVerifyBtn))->click();}catch (\Exception $e) {   //对于某些ajax请求生成的html元素或可能不存在的元素,捕捉异常信息是必须的,    echo $e->getMessage()."\n";}try {   //小圆圈的css querySelector    $cssSelectorForCircleBtn = "#nc_1-stage-1 > div > div.click2slide-btn > div";   //这里的含义就不用解释了吧,跟上面类似    $driver->wait(10)        ->until(WebDriverExpectedCondition::presenceOfAllElementsLocatedBy(            WebDriverBy::cssSelector($cssSelectorForCircleBtn)        )        );    $driver->findElement(WebDriverBy::cssSelector($cssSelectorForCircleBtn))->click();}catch (\Exception $e){    echo $e->getMessage()."\n";}//为了看到效果,我们让这个会话界面停留20秒sleep(20);//关闭会话$driver->quit();

最后的结果截图如下:

竟然没有成功,笔者现在还在研究为什么会失败,本文权当是抛砖引玉,希望同学们发挥你们的才能突破淘宝自动登录。

代码放在这里(git clone https://gitee.com/node_study/php-webdriver-demos.git),直接运行 php loginTaobaoMobile.php 即可。

注意事项

  1. 要求安装chrome浏览器;
  2. 使用 java -jar selenium-server-standalone-3.9.1.jar 运行 Tool 目录的selenium 服务端单例程序;
  3. 一定要配置好 chromedriver.exe 的正确位置;

4.mac 用户自己 google 一份 chromedriver.dmg。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档