下面是关于“Python2.7+Selenium2实现淘宝滑块自动认证功能”的完整攻略,包括环境搭建、安装Selenium、代码示例等步骤。
环境搭建
首先,需要安装Python 2.7版本以及pip包管理工具。之后,通过pip安装相关依赖包,包括selenium、pillow和numpy等。这些包的安装可以通过以下命令来完成:
pip install selenium
pip install pillow
pip install numpy
安装浏览器驱动
为了使用Selenium打开并模拟浏览器行为,需要下载对应浏览器的驱动。例如,Chrome浏览器需要下载并安装ChromeDriver。然后需要将驱动程序所在路径添加到环境变量中,以便Python能够找到驱动程序。
示例代码
下面是一个简单的淘宝滑块自动认证的示例代码:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
import numpy as np
import time
def get_snap(driver):
"""
截取当前页面并保存为图片
"""
driver.save_screenshot('fullpage.png')
page_snap_obj = Image.open('fullpage.png')
return page_snap_obj
def get_image(snap_obj, location):
"""
根据location从snap_obj中截取滑块图片
"""
img_obj = snap_obj.crop(location)
return img_obj
def get_distance(image1, image2):
"""
将image1和image2转为numpy数组并计算距离
"""
array1 = np.array(image1.convert('L'))
array2 = np.array(image2.convert('L'))
distance = np.linalg.norm(array1 - array2)
return distance
def get_track(distance):
"""
根据距离计算滑块移动轨迹
"""
track_list = []
# 总共移动次数,每次移动距离不超过10像素
step_count = int(distance / 10)
# 计算每次移动距离和方向
for i in range(step_count):
track_list.append(10)
# 剩余距离
remainder = int(distance % 10)
track_list.append(remainder)
# 随机化轨迹
return track_list
def move_to_gap(driver, slider, track):
"""
根据轨迹移动滑块
"""
ActionChains(driver).click_and_hold(slider).perform()
for x in track:
ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()
time.sleep(0.5)
ActionChains(driver).release().perform()
if __name__ == '__main__':
# 初始化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()
# 打开淘宝登录页面
driver.get('https://login.taobao.com/member/login.jhtml')
# 等待网页元素加载完成
time.sleep(2)
# 点击滑块按钮,显示滑块
slider_button = driver.find_element_by_id('nocaptcha-password')
slider_button.click()
# 截取页面并获取滑块图片
page_snap_obj = get_snap(driver)
slider_img = driver.find_element_by_xpath('//div[@id="nc_1_n1z"]//img')
slider_location = slider_img.location
slider_size = slider_img.size
slider_range = (slider_location['x'], slider_location['y'], slider_location['x'] + slider_size['width'],
slider_location['y'] + slider_size['height'])
slider_img_obj = get_image(page_snap_obj, slider_range)
# 移动滑块
track_list = get_track(170)
slider_element = driver.find_element_by_id('nc_1_n1z') # 滑块的元素id
move_to_gap(driver, slider_element, track_list)
# 关闭浏览器
driver.quit()
运行示例代码后,可以自动打开淘宝登录页面并模拟人类操作来通过滑块认证。其中,get_snap()
用于截取当前窗口并存储为图片;get_image()
用于从截图中截取某一区域的图片;get_distance()
用于计算两张图片之间的距离;get_track()
用于生成滑块移动轨迹;move_to_gap()
用于模拟人类拖动滑块的过程。
另外,需要注意的是,滑块的元素id可能会因为淘宝的更新而改变,需要根据实际情况进行修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python2.7+selenium2实现淘宝滑块自动认证功能 - Python技术站