2020年最新的过某宝滑块验证技术,Python大牛轻松搞定技术难题
致谢:
Charles未晞
Charles的皮卡丘
提供解决思路,此文实为借鉴。
前言:
利用selenium模拟登录淘宝,外界传言这个确实很难过,有各种轨迹检测。
但是我没想到淘宝的滑块验证码这么容易就能过。
私信小编001即可获取大量Python学习资料。
开发工具
Python版本:3.6.4
相关模块:
selenium模块;
python内置模块。
Chromedriver:
自行谷歌,下载和电脑上的谷歌浏览器版本相匹配的驱动。
selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器;由于selenium解析执行了CSS、JavaScript所以相对requests它的性能是低下的;
1.安装selenium
pip install selenium
先实例化一个webdriver.Chrome对象,用于自动化操作我们电脑里的谷歌浏览器:
browser = webdriver.Chrome(executable_path=chromedriverpath)
模拟点击网页左上方的"亲,请登录"以进入淘宝网的登录界面:
然后跳转到下面的界面:
刚开始居然是没有出现验证码的,是我多次试错后调试出来的。
模拟输入账户信息:
# 输入用户名密码
username_sender = driver_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="fm-login-id"]')))
username_sender.send_keys(username)
password_sender = driver_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="fm-login-password"]')))
password_sender.send_keys(password)
这类滑块验证码需要用户按住滑块,并将它拖动到最右边。一开始我也以为淘宝会加入一些检测手段以识别是机器还是人在操作滑块。结果发现和外界传闻的不一样,用ActionChains函数直接把滑块拖到最右边就可以验证通过了:
try:
slider = browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")
if slider.is_displayed():
ActionChains(browser).click_and_hold(on_element=slider).perform()
ActionChains(browser).move_by_offset(xoffset=258, yoffset=0).perform()
ActionChains(browser).pause(0.5).release().perform()
except:
pass
最后模拟点击一下登录按钮就行了:
# 点击登录按钮
button = driver_wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="login-form"]/div[4]/button')))
button.click()
程序到这里就大功告成了,有些人就很奇怪了,为什么这么简单就可以真的实现过验证呢?其实吧就总结了一句话:纸上得来终觉浅,绝知此事要躬行!