某宝页面登陆滑块验证 selenium + chromedriver (亲测)

selenium + chromedriver 模拟用户登陆。主要解决登录滑块的问题。

滑块被检验出来为 webdriver 驱动

先把chromedriver.exe文件.bak 备份一份

下载nodepadd++ 编辑器,右击打开 chromedriver.exe ,ctrl + F, 输入 $cdc

将红色划线部分内容随便改一下,位数长度不变

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
user_ag = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
options.add_argument('user-agent=%s' % user_ag)

driver = webdriver.Chrome(executable_path="chromedriver", options=options)
# 打开某宝登录页面
driver.get("某宝登录地址")
# 定义js代码
script = "Object.defineProperty(navigator,'webdriver',{get: ()=> false,});"
# 执行js代码
driver.execute_script(script)
time.sleep(2)
driver.find_element(By.NAME,'fm-login-id').send_keys("用户名")
time.sleep(2)
driver.find_element(By.NAME,'fm-login-password').send_keys("密码")
time.sleep(2)
try:
    # 找到滑块
    slider = driver.find_element(By.XPATH,"//span[contains(@class, 'btn_slide')]")
    # 判断滑块是否可见
    if slider.is_displayed():
        # 点击并且不松开鼠标
        ActionChains(driver).click_and_hold(on_element=slider).perform()
        # 往右边移动258个位置
        ActionChains(driver).move_by_offset(xoffset=258, yoffset=0).perform()
        # 松开鼠标
        ActionChains(driver).pause(0.5).release().perform()
except:
    pass
time.sleep(2)
driver.find_element(By.XPATH,'//*[@id="login-form"]/div[4]/button').click()

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
淘宝滑块验证比较复杂,需要使用一些特殊的技巧才能成功模拟登录。 以下是一个使用Selenium模拟登录淘宝并通过滑块验证的示例代码: ```python from selenium import webdriver import time from PIL import Image from io import BytesIO from selenium.webdriver.common.action_chains import ActionChains def get_snap(driver): # 获取网页截图 snap_obj = driver.get_screenshot_as_png() snap = Image.open(BytesIO(snap_obj)) return snap def get_slider(driver): # 获取滑块对象 slider = driver.find_element_by_xpath("//span[@class='btn_slide']") return slider def get_image(driver): # 获取验证码图片对象 img = driver.find_element_by_xpath("//img[@id='nc_1__img_captcha']") img_obj = Image.open(BytesIO(img.screenshot_as_png)) return img_obj def get_distance(img1, img2): # 计算滑块移动距离 pix1 = img1.load() pix2 = img2.load() distance = 0 for i in range(60, img1.size[0]): for j in range(img1.size[1]): if pix1[i, j] != pix2[i, j]: distance += abs(i - 60) return distance def slide(driver, slider, distance): # 模拟滑动滑块 ActionChains(driver).click_and_hold(slider).perform() while distance > 0: if distance > 10: span = 10 else: span = distance ActionChains(driver).move_by_offset(span, 0).perform() distance -= span time.sleep(0.1) ActionChains(driver).release().perform() # 启动浏览器 driver = webdriver.Chrome() driver.get("https://login.taobao.com/") # 输入用户名和密码 driver.find_element_by_id("fm-login-id").send_keys("your_username") driver.find_element_by_id("fm-login-password").send_keys("your_password") # 点击登录按钮 driver.find_element_by_xpath("//button[@class='fm-button fm-submit password-login']").click() # 等待滑块出现 time.sleep(3) # 获取验证码图片 img1 = get_image(driver) # 滑动滑块 slider = get_slider(driver) ActionChains(driver).move_to_element(slider).click().perform() time.sleep(2) # 获取滑块移动后的验证码图片 img2 = get_image(driver) # 计算滑块移动距离 distance = get_distance(img1, img2) # 模拟滑动滑块 slide(driver, slider, distance) # 等待登录完成 time.sleep(5) # 关闭浏览器 driver.quit() ``` 请注意,上述示例代码仅供参考,具体实现可能需要根据页面结构和滑块验证的设计进行微调。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值