问题1:xpath定位正确,但是获取不到内容
解决办法:
import time time.sleep(2)
添加强制等待时间
问题2:xpath定位正确,跳转到新页面,定位失败
解决办法:
handles = driver.window_handles #获取当前浏览器的所有窗口句柄 driver.switch_to.window(handles[-1]) #切换到最新打开的窗口
在获取xpath的上面添加即可。
贴上完整代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from PIL import Image
import time
import ddddocr
# 自动化进入网页
s = Service(r"F:Courseedutestchromedriver.exe")
driver = webdriver.Chrome(service=s)
driver.get('网页')
driver.refresh() # 刷新页面
driver.maximize_window() # 浏览器最大化
# 获取验证码的图片,并进行识别,将识别的结果,输入到验证码输入框中
# 对当前页面进行截图
driver.save_screenshot('login.png')
# 选择验证码图片的元素
yzm_btn = driver.find_element_by_id('imgObj')
# 获取图片元素的位置
loc = yzm_btn.location
# 获取图片的宽高
size = yzm_btn.size
# 获取验证码上下左右的位置,电脑的缩放比例125%(100%就不需要乘),需要乘以1.25,否则会出现定位不准确
left = loc['x']
top = loc['y']
right = (loc['x'] + size['width'])
botom = (loc['y'] + size['height'])
val = (left, top, right, botom) # 得到左上右下的值,顺序固定
# 打开网页截图
login_pic = Image.open('login.png')
# 通过左上右下的值,去截取验证码
yzm_pic = login_pic.crop(val)
# 保存验证码
yzm_pic.save('yzm.png')
# 识别验证码
ocr = ddddocr.DdddOcr(old=True)
with open("yzm.png", 'rb') as f:
image = f.read()
res = ocr.classification(image)
# 填充用户名 密码 验证码
driver.find_element_by_name('txt_loginName').send_keys("账号")
driver.find_element_by_name('txt_password').send_keys("密码")
driver.find_element_by_name("txt_code").send_keys(res)
# 点击登录,登录成功
driver.find_element_by_class_name("login_button").click()
# 点击我的专业课程
driver.find_element_by_link_text("我的专业课程").click()
# 点击计算机组成与结构
time.sleep(2)
driver.find_element_by_xpath('//*[@id="courseList"]/li[1]/p/a').click()
# 点击前去学习
time.sleep(2)
driver.find_element_by_xpath('//button[@]').click()
# 点击开始学习 进入新页面
time.sleep(2)
handles = driver.window_handles #获取当前浏览器的所有窗口句柄
driver.switch_to.window(handles[-1]) #切换到最新打开的窗口
driver.find_element_by_xpath('//div[@]/a[@]/span[@id="btn_openCourse_2222"]').click()
# 循环播放所有课程目录
# 试播第一课
time.sleep(2)
handles = driver.window_handles #获取当前浏览器的所有窗口句柄
driver.switch_to.window(handles[-1]) #切换到最新打开的窗口
driver.find_element_by_xpath('//*[@id="finish_0"]/a').click()
希望能帮到你呀~



