Selenium之爬虫与反爬

最近遇到一个需求------爬取携程网站中的酒店详情。

具体如下截图:

凡是有过想爬取携程酒店信息的同学,估计都时被携程的反爬技术所困扰。参数OCEANBALL,ELEVEN的加密解密,就够大家琢磨十天半个月了,在碰上个没有JS基础的同学,基本就可以直接放弃了。最关键的是,携程的加密方法,每隔一段时间就会改变,所以即便碰见了爬虫高手,也需要不断的耗费时间对抗携程的反爬,根本无法应用在实际生产中。所以直接通过解密参数直接通过api连接的方式,应该可以放弃了。如果仅当学习,那么可以深度研究下携程的反爬。

既然想运用在实际生产中,又要考虑到效率问题,在征得甲方爸爸的意见后,我采用了一个更加简便的方法。直接使用selenium+chromeDriver/GeckoDriver/FirefoxDriver来进行数据获取。

但是在实际运行过程中,就发现了一个很奇怪的现象,携程的反爬着实令人抓不到头脑。因为在测试过程中,有时候能够获取到正确的数据,有时候,就无法获取正确的数据(数据被下毒),有的时候,直接就被跳转到登录页面,假数据都不给你。为了能够研究出如何才能获取到数据,苦逼的开启了测试模式。

测试第一版:

1- selenium3 + chrome(80版本)

System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
driver = new ChromeDriver(options) ;
//等待时间,超过60秒网页加载不完,会报错
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
driver.get(url);

这段代码运行后,打开任一酒店页面,会被跳转至登录页面,因为navigator.webdriver = true ;

为了避免webdriver = true这一selenium的典型特征,怎么办?百度下,一般是告诉加入如下一段代码:

options.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation")) ;
options.setExperimentalOption("useAutomationExtension", false) ;

加入之后,再次实验一下,发现毫无作用。因为在旧的webdriver版本中,开始开发者模式,是可以解决这一问题的,但是在最近的版本中,webdriver=true的bug,被他们修复了~  是的,在开发者看来,这是个bug ~ 

怎么办?继续百度,墙内不行,我们就去墙外看看。功夫不负有心人,我们把上面的两行参数给去掉,加入下面两行代码:

options.addArguments("--disable-blink-features") ;
options.addArguments("--disable-blink-features=AutomationControlled") ;

再次打开任一酒店页面。发现竟然没有跳转到登录页面~~~~

啦啦啦啦~~~激动地心,颤抖的手,竟然躲过了webdriver=true的检测,而且完美加载出了每个房间的价格与一些其他参数。

等等,好像挺完美的,但是好像又有一些不对劲呢~  

具体哪里不对劲,今天有点晚了,下次我在继续写~ 好菜不怕晚, 好话不嫌慢哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wpfeitian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值