版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29027865/article/details/85339233
最近在解决完淘宝爬虫接口后,因为业务需要要用到商品截图的功能,于是研究了一下,分享一下其中的难点吧~
这里我们以淘宝的某电饭煲商品为例->
1.PC端
登陆滑块验证:我们看到阿里的滑块验证很简洁,没有类似那种拼图的样式,所以研究其轨迹方程不是重点。经充足时间研究整个过程,发现是使用senlenium时,其打开的chrome driver被识别为自动软件登陆,原本的一个属性值为true,将其改为false即可实现滑块验证。
先上结果,如图:
可以看到验证通过,在这里,navigator.webdriver即是判断是否是自动登陆的一个属性值,淘宝也是基于此判断的。刚开始时,笔者尝试直接将navigator.webdriver赋值进行改变,可尝试过后发现,navigator.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)