Python Selenium UI 自动化问题汇总

Python Selenium UI 自动化问题汇总

问题1:xpath定位正确,但是获取不到内容
解决办法:

import time
time.sleep(2)

在这里插入图片描述

添加强制等待时间

问题2:xpath定位正确,跳转到新页面,定位失败
解决办法:

handles = driver.window_handles          #获取当前浏览器的所有窗口句柄
driver.switch_to.window(handles[-1])     #切换到最新打开的窗口

在获取xpath的上面添加即可。
在这里插入图片描述问题3:如何获取button定位,直接copy xpath失败

driver.find_element_by_xpath('//button[@class="btn-warning btn btn-block"]').click()
driver.find_element_by_xpath('//div[@class="r"]/a[@class="btn-danger"]/span[@id="btn_openCourse_2222"]').click()

解决办法:使用class定位

问题5:遇到frame,应该怎么做,直接xpath失败

# 第一课 处理frame
driver.switch_to.window(driver.window_handles[-1])
driver.find_element_by_xpath('/html/body/div[3]/ul/li[1]/a').click()

定位前面加driver.switch_to.window(driver.window_handles[-1])即可。
贴上部分代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from PIL import Image
import time
import ddddocr

# 自动化进入网页
s = Service(r"F:\Course\edutest\chromedriver.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[@class="btn-warning btn btn-block"]').click()
# 点击开始学习 进入新页面
time.sleep(2)
handles = driver.window_handles          #获取当前浏览器的所有窗口句柄
driver.switch_to.window(handles[-1])     #切换到最新打开的窗口
driver.find_element_by_xpath('//div[@class="r"]/a[@class="btn-danger"]/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()

希望能帮到你呀~

你可能感兴趣的:(Python自动化,python,selenium,ui)