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

本文详细解析了如何使用Selenium绕过淘宝的PC端滑块验证,通过修改navigator.webdriver属性实现自动化登录。同时,介绍了如何配置手机端user-agent和deviceMetrics参数,实现Selenium对手机页面的访问及截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在解决完淘宝爬虫接口后,因为业务需要要用到商品截图的功能,于是研究了一下,分享一下其中的难点吧~
这里我们以淘宝的某电饭煲商品为例->

1.PC端

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

webdriver的参数

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

对webdriver属性直接赋值

我们发现并未通过,原因是因为webdriver的属性为只读,无法通过赋值来简单改变,需要借助Object.defineProperty()方法,即可通过验证。
Object.defineProperties(navigator,{webdriver:{get:() => false}});
根据其他博客参考,淘宝的滑块验证无需太多轨迹方程,因为业务只需截图记录即可,接下来没有研究,将矛头对准了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进行选择商品,并截图,如图:

商品截图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

精神抖擞王大鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值