前言
正文
把打开百度的代码放到构造方法中
ps:那个文件目录是用于后面滑块验证图片保存的。
def __init__(self):
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.maximize_window()
self.page = driver
self.filename = 'G:\\scroll\\'
点击右上角的“登录”按钮,打开登录框,
代码如下:
driver = self.page
driver.find_element(By.ID, 's-top-loginbtn').click()
效果是这样:
输入用户名和密码,点击登录
driver.find_element(By.ID, 'TANGRAM__PSP_11__userName').send_keys('用户名')
driver.find_element(By.ID, 'TANGRAM__PSP_11__password').send_keys('密码')
driver.find_element(By.ID, 'TANGRAM__PSP_11__submit').click()
运行之后,竟然出现了一个滑块验证窗口:
打算用selenium的鼠标事件,模拟拖拽滑块的功能
先获取滑块的id,发现id竟然是动态变化的,后面有个随机变化的数字
没办法,只能使用xpath获取页面元素
/html/body/div[11]/div[1]/div/div[2]/div[2]
再获取滑块要滑动的框的xpath
/html/body/div[11]/div[1]/div/div[2]/div[1]
并获取这个div元素的宽度,进行移动,代码如下
flybutton = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[2]')
ActionChains(driver).move_to_element(flybutton).perform()
flybutton_div = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[1]')
print(flybutton_div.size['width'], flybutton_div.size['height'])
huakuia = ActionChains(driver)
huakuia.click_and_hold(flybutton).perform()
huakuia.move_by_offset(flybutton_div.size['width'], 0).perform()
huakuia.release()
运行了一下,效果是闪了一下,并没有滑动
思考良久,并查资料后看到一篇设置鼠标移动轨迹的文章,遂获得灵感,可能是移动的太快,被百度反爬工具发现了,于是每次5px循环的移动,
flybutton = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[2]')
ActionChains(driver).move_to_element(flybutton).perform()
flybutton_div = driver.find_element(By.XPATH, '/html/body/div[11]/div[1]/div/div[2]/div[1]')
print(flybutton_div.size['width'], flybutton_div.size['height'])
huakuia = ActionChains(driver)
huakuia.click_and_hold(flybutton).perform()
x = flybutton_div.size['width']
i = 0
step = 5
while i < x:
i = i + step
huakuia.move_by_offset(step, 0).perform()
time.sleep(3)
huakuia.release()
效果很好,哈哈~,我设置的移动一次休眠3秒,这个可以调快一些,不然心急的可能就认为没有生效。
滑动滑块是生效了,可是依然没有登录成功,因为系统要求的是把图片放正,并不是把滑块移动最右边
又进行了大量资料的查询,搜到一篇文章,是用python实现图片方向变换的功能,最关键的是里面实现了计算图片倾斜角度的计算,
地址是:python实现图片歪斜纠正+代码和注释
关键代码如下:
继续进行代码改进
运行之后,还是没有成功
最后发现计算的图片倾斜角度都是一样的,打开图片保存目录一看,是下面这样的:
原来相同一个图片,移动滑块旋转后保存的图片都是一样的,就是初始图片的样子, 怪不得失败了。。。
继续查资料,发现selenium有一个截图的功能,于是使用这个截图功能去保存旋转后的图片
img = self.page.find_element(by=By.XPATH, value="/html/body/div[11]/div[1]/div/div[1]")
data_s = img.screenshot(file) # 截取后直接是二进制,无括号
保存图片后发现还是没有旋转前的图片,真是心累。。。。。
先记录在这里,后面再改进吧