一 .开始之前准备
1.在浏览器上模拟鼠标和键盘操作
selenium(第三方库)
chromedriver(能在浏览器上自动化的关键)
2.图像识别,解决验证码问题
可以参照这个
pillow
pytesseract
Tesseract-OCR
使用如下指令在cmd中安装
pip install selenium
pip install pillow
pip install pytesseract
二.打开网页并且成功登陆
下学期有一门课在zjooc上,所以我们来尝试zjooc.cn
我们先打开网页,通过xpath来定位,然后输入用户名和密码
然后我们开一个永真循环来输入验证码,因为这个识别是有时候会出问题的
因为登陆之后页面会变,所以循环里的定位会出问题报错,我们正好可以用异常捕获来退出这个永真循环
总得来说zjooc的网页做的是真不错,简单易懂
代码
from selenium import webdriver
from PIL import Image
import pytesseract as pytesseract
import time
#打开网页
driver = webdriver.Chrome()
def login(username,password):
driver.get('https://www.zjooc.cn/')
driver.maximize_window()
driver.find_element_by_xpath('/html/body/div/section/header/div/div[2]/div[1]/div[3]/div[2]').click()
#输入学号和密码并且登入
time.sleep(1)
driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/div[1]/input').send_keys(username)
print('输入用户名成功')
driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/div[2]/input').send_keys(password)
print('输入密码成功')
while True:
url = driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/div[3]/img').get_attribute('src')
driver.save_screenshot("picture.png")
tmp = driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div[3]/div[3]/img")
left = tmp.location["x"]
top = tmp.location["y"]
right = tmp.size["width"] + left
height = tmp.size["height"] + top
img = Image.open("picture.png")
img = img.crop((left, top, right, height))
img.save("sreenshot.png")
cap = Image.open("sreenshot.png")
print('获取当前验证码图片成功')
text = pytesseract.image_to_string(cap)
print('识别到为:'+text)
driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/div[3]/input').send_keys(text)
time.sleep(5)
try:
driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/button').click()
except:
print('输入的验证码正确')
break
else:
print('输入的验证码错误,将再次尝试')
time.sleep(5)
driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[3]/div[3]/input').clear()
if __name__ == '__main__':
username=''
password=''
login(username,password)