|
我想利用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/'
- opti** = webdriver.ChromeOpti**()
- opti**.add_experimental_option('excludeSwitches', ['enable-automation'])
- driver = webdriver.Chrome(executable_path="E:\\chromedriver.exe",
- chrome_opti**=opti**)
- 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)
复制代码
|
|