淘宝手机端-selenium破解过程详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29027865/article/details/85339233

最近在解决完淘宝爬虫接口后,因为业务需要要用到商品截图的功能,于是研究了一下,分享一下其中的难点吧~

这里我们以淘宝的某电饭煲商品为例->

1.PC端

登陆滑块验证:我们看到阿里的滑块验证很简洁,没有类似那种拼图的样式,所以研究其轨迹方程不是重点。经充足时间研究整个过程,发现是使用senlenium时,其打开的chrome driver被识别为自动软件登陆,原本的一个属性值为true,将其改为false即可实现滑块验证。

先上结果,如图:

webdriver的参数

可以看到验证通过,在这里,navigator.webdriver即是判断是否是自动登陆的一个属性值,淘宝也是基于此判断的。刚开始时,笔者尝试直接将navigator.webdriver赋值进行改变,可尝试过后发现,navigator.webdriver值没有发生变化,如图:

对webdriver属性直接赋值

我们发现并未通过,原因是因为webdriver的属性为只读,无法通过赋值来简单改变,需要借助Object.defineProperty()方法,即可通过验证。

根据其他博客参考,淘宝的滑块验证无需太多轨迹方程,因为业务只需截图记录即可,接下来没有研究,将矛头对准了selenium的手机端。

2.手机端

相对PC端而言,手机端无需登陆,而且防御措施也比较少,可以直接进行访问。笔者在这里通过改变请求头user-agent以及deviceMetrics,配置其手机端的width,height参数实现了selenium登陆手机端(只配置user-agent不行,目前没有确定原因,欢迎一起交流讨论),设置如下:

def __init__(self):
    self.WIDTH = 320
    self.HEIGHT = 640
    self.PIXEL_RATIO = 3.0
    self.UA = 'Mozilla/5.0 (Linux; Android 4.1.1; GT-N7100 Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/35.0.1916.138 Mobile Safari/537.36 T7/6.3'
def start(self):	
	mobileEmulation = {
	            "deviceMetrics": {"width": self.WIDTH, "height": self.HEIGHT, "pixelRatio": self.PIXEL_RATIO},
	            "userAgent": self.UA}
	options = webdriver.ChromeOptions()
	options.add_experimental_option('mobileEmulation', mobileEmulation)
	driver = webdriver.Chrome(chrome_options=options)

通过driver.get(url),得到了如下界面:

手机端

但是这里发现,用鼠标点选规格,依然无法选中(如图,点选为蓝色,无法展开)。

这里的原因仍是因为淘宝识别出了你是用webdriver来自动打开的,故方法与上述一致,通过js改变即可。

有时会发现传入了js仍然无法成功的情况,原因是因为你在get(url)之后才改变的js,这时淘宝已经判断完毕是否是webdriver,此时属性即使变为false也没有卵用,因此需要在get(url)之前,就将js传入并改变。接下来就可以通过xpath点开,再由xpath进行选择商品,并截图,如图:

商品截图

期间得到了“慵懒的饭桶”,以及大壮老师的一些帮助,后续优化后再更新,欢迎拍砖~

猜你喜欢

转载自blog.csdn.net/qq_29027865/article/details/85339233
今日推荐