jasonyun 2020-02-16 09:54 采纳率: 0%
浏览 341

关于用webdriver模拟虾米登录的滑块验证问题

我想利用webdriver模拟虾米登录,但遇到滑块验证时,总是滑不完,不知道问题出在哪里,是滑动的距离问题还是?

# 鼠标加速度办法
def get_tracks(distance):
    '''
    拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速
    匀变速运动基本公式:
    ①v=v0+at
    ②s=v0t+1/2at
    ③v
    '''
    #初速度
    v = 0
    #单位时间为0.2秒来统计轨迹,轨迹即0.2秒内的位移
    t = 0.3
    #位移列表,列表中的一个元素代表0.2s的位移
    tracks = []
    #当前位移
    current = 0
    #到达mid值开始减速
    mid = distance * 4 / 5
    while current < distance:
        if current < mid:
            #加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细
            a = 2
        else:
            a = -3
        #初速度
        v0 = v
        #0.2秒内的位移
        s = v0 * t + 0.5 * a * (t**2)
        #当前的位移
        current += s
        #添加到轨迹列表
        tracks.append(round(s))
        #速度已经到达v,该速度作为下次速度的初速度
        v = v0 + a * t
        return tracks


def login_xiami():
    url = 'https://www.xiami.com/'
    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    driver = webdriver.Chrome(executable_path="E:\\chromedriver.exe",
                              chrome_options=options)
    driver.maximize_window()
    driver.get(url)

    driver.find_element_by_xpath(
        '//*[@id="app"]/div/div[1]/div/div[3]/div').click()
    time.sleep(2)
    driver.find_element_by_xpath(
        '//*[@id="passport-form"]/div[2]/div/div[1]/span[2]').click()
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="account"]').send_keys(username)
    driver.find_element_by_xpath('//*[@id="password"]').send_keys(password)

    element = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]')
    ActionChains(driver).click_and_hold(on_element=element).perform()
    time.sleep(0.5)
    ActionChains(driver).move_to_element_with_offset(element, 200, 0).perform()
    tracks = get_tracks(130)
    for track in tracks:
        ActionChains(driver).move_by_offset(track, 0).perform()
    time.sleep(0.8)
    ActionChains(driver).release().perform()
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="account-login-submit"]').click()
    time.sleep(3)
  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 17:33
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况