如何使用Selenium爬取淘宝数据

/ Java / 0 条评论 / 280 浏览

Selenium的操作可以去各种博客搜,有成熟的教程,文章略过。

需求:登陆商家后台下载各种商家平台数据,处理后上传到内部数据分析平台。

核心:登陆

为什么说核心是登陆呢?按照正常理解来说,使用Selenium爬取淘宝网并不是难事,但是使用这玩意登陆是一个很严重的问题,年前制作了一版的爬虫,测试时虽然在登陆的时候出现滑动验证码,人为参与一下就可以解决了,但是在交付的当天,淘宝升级了滑动验证码,无论如何滑动都不能通过验证。所以年后这几天一直在研究如何绕过验证码。

解决办法:浏览器使用firefox,并加载本地的profile文件,再加上自定义的一些设置,可轻松绕过验证码。至于为什么不在谷歌浏览器加缓存,一个神奇的BUG,在我的电脑上加入缓存后谷歌死活起不来,只能换浏览器。

废话不多说,上打开浏览器的代码

//"C:\\Users\\" + System.getProperty("user.name") + "\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\"
//上方文件夹下,有一个奇怪的文件夹,就是它啦
String sprofilePath ="这里是你的forefox本地配置的路径";
FirefoxProfile firefoxProfile = new FirefoxProfile(new File(sprofilePath));
firefoxProfile.setAcceptUntrustedCertificates(true);
firefoxProfile.setPreference("browser.download.folderList", 1);
firefoxProfile.setPreference("browser. link. open_newwindow. restriction", 1);
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream, application/vnd.ms-excel, text/csv, application/zip,"
    + " application/msexcel");
firefoxProfile.setPreference("browser.link.open_newwindow", 3);    
FirefoxOptions options = new FirefoxOptions();
options.setProfile(firefoxProfile);
// Firefox配置文件,如果不设置这个也可能会被认为是爬虫
FirefoxDriver driver = new FirefoxDriver(options);

代码就这么多,其中设置的各个key代表的意思我这里稍作解释,毕竟这玩意不好找。

browser.download.folderList:默认下载到我的下载目录。

browser.helperApps.neverAsk.saveToDisk:这个配置很关键,下载时如果响应头类型是这些,直接下载不再询问,如果有其他格式的,使用开发工具查看后添加进去就行了。

browser.link.open_newwindow:这个配置可有可无,主要作用就是在URL需要新建窗口和标签页时都强制新建标签页,浏览器只有一个窗口,多个标签页,比较容易观察。

坑:

FirefoxDriver还有一个重要的坑,就是经常出现driver过期的情况,调用一次switchTo().defaultContent();即可解决。

猜测

总感觉不是不是我加缓存的原因导致滑动验证码不出现,像淘宝这么大的平台,不可能没有自动化测试的东西,前端的自动化测试,通过Selenium是比较好的选择,他们也不能对验证码太过严格,大胆猜测他们内部使用的浏览器很有可能是Firefox,所以滑动验证码一直不出现。至于是不是这个原因,就看后续爬虫的运行结果。

如果还是遇到验证码出现的问题,请清除火狐浏览器的profile文件夹。必要时重新安装火狐浏览器。个人猜测应该是你的cookie已经被淘宝服务器记录,所以在不清除profile的文件下,依然会出现验证码。