找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2090|回复: 0

[求助] 关于模拟虾米登录的滑动块验证问题

0

主题

0

帖子

0

积分

贫民

积分
0
慕容子 发表于 2020-2-19 09:49:29 | 显示全部楼层 |阅读模式
我想利用webdriver模拟虾米登录,但遇到滑块验证时,总是滑不完,不知道问题出在哪里,是滑动的距离问题还是?
代码如下:
  1. # 鼠标加速度办法
  2. def get_tracks(distance):
  3.     '''
  4.     拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
  5.     匀变速运动基本公式:
  6.     ①v=v0+at
  7.     ②s=v0t+1/2at
  8.     ③v
  9.     '''
  10.     #初速度
  11.     v = 0
  12.     #单位时间为0.2秒来统计轨迹,轨迹即0.2秒内的位移
  13.     t = 0.3
  14.     #位移列表,列表中的一个元素代表0.2s的位移
  15.     tracks = []
  16.     #当前位移
  17.     current = 0
  18.     #到达mid值开始减速
  19.     mid = distance * 4 / 5
  20.     while current < distance:
  21.         if current < mid:
  22.             #加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细
  23.             a = 2
  24.         else:
  25.             a = -3
  26.         #初速度
  27.         v0 = v
  28.         #0.2秒内的位移
  29.         s = v0 * t + 0.5 * a * (t**2)
  30.         #当前的位移
  31.         current += s
  32.         #添加到轨迹列表
  33.         tracks.append(round(s))
  34.         #速度已经到达v,该速度作为下次速度的初速度
  35.         v = v0 + a * t
  36.         return tracks


  37. def login_xiami():
  38.     url = 'https://www.xiami.com/'
  39.     opti** = webdriver.ChromeOpti**()
  40.     opti**.add_experimental_option('excludeSwitches', ['enable-automation'])
  41.     driver = webdriver.Chrome(executable_path="E:\\chromedriver.exe",
  42.                               chrome_opti**=opti**)
  43.     driver.maximize_window()
  44.     driver.get(url)

  45.     driver.find_element_by_xpath(
  46.         '//*[@id="app"]/div/div[1]/div/div[3]/div').click()
  47.     time.sleep(2)
  48.     driver.find_element_by_xpath(
  49.         '//*[@id="passport-form"]/div[2]/div/div[1]/span[2]').click()
  50.     time.sleep(2)
  51.     driver.find_element_by_xpath('//*[@id="account"]').send_keys(username)
  52.     driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)

  53.     element = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]')
  54.     ActionChains(driver).click_and_hold(on_element=element).perform()
  55.     time.sleep(0.5)
  56.     ActionChains(driver).move_to_element_with_offset(element, 200, 0).perform()
  57.     tracks = get_tracks(130)
  58.     for track in tracks:
  59.         ActionChains(driver).move_by_offset(track, 0).perform()
  60.     time.sleep(0.8)
  61.     ActionChains(driver).release().perform()
  62.     time.sleep(2)
  63.     driver.find_element_by_xpath('//*[@id="account-login-submit"]').click()
  64.     time.sleep(3)
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表