注册
登录
提问时间:2016/8/13 9:33:24
最近我们实验室和一个公司合作,他家的产品一个功能模块就是反爬虫,测试网址入口为这里:http://119.254.209.77/。该网页左侧的URL采用JS动态生成,我们团队花了好一段时间才把加密的JS给解密了。我采用Python+Selenium+Firefox进行抓取返回的页面为空,它左侧的URL都被保护了,并且能识别使用selenium驱动的爬虫。我想问问这个技术该怎么应对?因为昨晚我看到携程一个研发经理也分享了一些反爬虫的经验,其中有一条就是针对Phantomjs等自动化工具的,但他说暂时不公开技术细节。有没有大神可以给我一点启发啊?感激不尽。除了stackoverflow有人会写代码,其它热心网友都不写代码试试,这里我贴上自己的代码,希望有热心人士可以帮忙解答(不用chrome来采集):


from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://119.254.209.77/')
time.sleep(5)
pageSource = driver.page_source
print(driver.page_source)
# the target url
checking = driver.find_element_by_id('_ctl0__ctl0_Content_MenuHyperLink2')
checking.click()
time.sleep(2)
print(driver.page_source)
1楼(未知网友)

欢迎批评指正:
就本人使用selenium操作webdriver的经验来说,被识别的情况应该只有一种:后台通过操作间隔(如点击),是否有焦点移动(鼠标移过页面元素)等人类操作和机器操作之间的一些特征区别来识别。
以提主提供的代码来举例,页面get完成后sleep5秒,打印页面源码操作应该是瞬间完成的,那么下一个find element到点击的动作基本上是在页面加载完成后5秒(前后误差应该极小),而正常人类的操作应该很难卡在这么精准的时间~
这是我的猜想,验证也很简单,sleep时间用随机的试试就知道了
地铁上用爪机码字,第一次认真回答,回家马上试试,期待题主回复
对了顺便说下我夫人是携程6年老员工,本人投过携程it部N次简历无果~看到提主提到携程顺便说下,我真的没有很干的感觉,恩
2楼(未知网友)

设随机休眠时间?加header?用代理ip?还不行?用phantomjs呢?我最近也在做相关方面实验,自动化脚本,登录带有验证码的教务系统,可以交流
======
我试了下,没毛病啊,主页可以进去,但是并没有你要找的元素,抛出错误,无法定位元素
3楼(未知网友)

#JAVA的实现大概是这样
#JAVA+Selenium+Chrome
#https://sites.google.com/a/chromium.org/chromedriver/getting-started
...
ChromeDriver driver=new ChromeDriver(chromeCaps);
driver.navigate().to("http://119.254.209.77");

((JavascriptExecutor)driver).executeScript("document.getElementById('_ctl0__ctl0_Content_MenuHyperLink14').click();");

String content=driver.getPageSource();
...
4楼(未知网友)

我试过了,firefox确实不行,估计是针对python版的selenium驱动firefox的一点特征信息,然后被屏蔽了。chrome没试。

PS:用selenium驱动firefox仅仅打开首页,手动点击链接都会被屏蔽,说明至少是在打开页面的时候就被识别为了selenium驱动的firefox。

所以我猜测是被很取巧的方式,识别了手工打开浏览器和selenium驱动浏览器,于是我把两个浏览器打开后的信息拿出来对比:
我注意到确实有些不同。
立即注册站大爷用户,免费试用全部产品
立即注册站大爷用户,免费试用全部产品