使用title_contains检查页面是否正确
from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC import time driver=webdriver.Firefox() driver.get("https://www.baidu.com/") time.sleep(3) print(EC.title_contains("一下")(driver)) #True print(EC.title_is("123")(driver)) #False # EC.title_contains("一下") title部分匹配 # EC.title_is("百度一下,你就知道") title完全比配, print(driver.title) driver.quit()
使用不同方式进行定位
使用Expected_conditions判断元素是否可见
EC.visibility_of_element_located 判断元素是否可见 看html中元素的visiable属性
如果定位到就返回WebElement,找不到元素 报错Message: no such element: Unable to locate element
from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC import time from selenium.webdriver.support.ui import WebDriverWait driver=webdriver.Firefox() driver.get("http://www.5itest.cn/login?goto=/course/explore") #element=driver.find_element_by_xpath("//input[@id='login_username']") locator=("xpath","//input[@id='login_username']") element=WebDriverWait(driver,10).until(EC.visibility_of_element_located(locator)) #判断元素是否可见 为则贝累忒 element.send_keys("121331") time.sleep(3) driver.quit()
Expected_conditions源码分析
输入注册用户名字及获取用户信息
get_attribute 获取元素的属性值
from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver=webdriver.Firefox() driver.get("http://www.5itest.cn/login?goto=/course/explore") element=driver.find_element_by_xpath("//input[@id='login_username']") print(element.get_attribute("placeholder")) element.send_keys("123@qq.com") print(element.get_attribute("value")) driver.quit()
如何生成用户名
用到了random.sample()
from selenium import webdriver import random import time from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait driver=webdriver.Firefox() driver.get("http://www.5itest.cn/login?goto=/course/explore") loc1=("xpath","//input[@id='login_username']") loc2=("xpath","//input[@id='login_password']") loc3=("","") ram="asdfghjkl1234567890" user_email=random.sample(ram,5) user_pass=random.sample(ram,5) print(user_email) #输出是list user_email=" ".join(random.sample(ram,5))+"@163.com" print("转josn后%s: "% user_email) element=WebDriverWait(driver,10).until(EC.presence_of_element_located(loc1)) element.send_keys(user_email) time.sleep(3) element2=WebDriverWait(driver,10).until(EC.presence_of_element_located(loc2)) element2.send_keys(user_pass) time.sleep(3) driver.quit()
如何解决验证码思路
如何解决验证码代码实战
使用pytesseract识别图片中得问题
showapiRequest解决图片验证码识别
注册输入验证码流程整合
注册流程梳理及代码封装
#coding=utf-8 from selenium import webdriver import time import random from PIL import Image from util.ShowapiRequest import ShowapiRequest driver = webdriver.Chrome() #浏览器初始化 def driver_init(): driver.get("http://www.5itest.cn/register") driver.maximize_window() time.sleep(5) #获取element信息 def get_element(id): element = driver.find_element_by_id(id) return element #获取随机数 def get_range_user(): user_info = ''.join(random.sample('1234567890abcdefghijklmn',8)) return user_info #获取图片 def get_code_image(file_name): driver.save_screenshot(file_name) code_element = driver.find_element_by_id("getcode_num") left = code_element.location['x'] top = code_element.location['y'] right = code_element.size['width']+left height = code_element.size['height']+top im = Image.open(file_name) img = im.crop((left,top,right,height)) img.save(file_name) #解析图片获取验证码 def code_online(file_name): r = ShowapiRequest("http://route.showapi.com/184-4","62626","d61950be50dc4dbd9969f741b8e730f5" ) r.addBodyPara("typeId", "35") r.addBodyPara("convert_to_jpg", "0") r.addFilePara("image", file_name) #文件上传时设置 res = r.post() print(res.text) text = res.json()['showapi_res_body']['Result'] return text #运行主程序 def run_main(): user_name_info = get_range_user() user_email = user_name_info+"@163.com" file_name = "E:/Teacher/Imooc/SeleniumPython/Image/test02.png" driver_init() get_element("register_email").send_keys(user_email) get_element("register_nickname").send_keys(user_name_info) get_element("register_password").send_keys("111111") get_code_image(file_name) text = code_online(file_name) get_element("captcha_code").send_keys(text) get_element("register-btn").click() driver.close() run_main()
以配置文件形式实现定位设计思想
如何读取配置文件low代码
导入pip install Configparser
将配置文件放置ini文件中
#coding=utf-8 import sys sys.path.append('E:/Teacher/Imooc/SeleniumPython') from selenium import webdriver import time import random from PIL import Image from find_element import FindElement from ShowapiRequest import ShowapiRequest class RegisterFunction(object): def __init__(self,url,i): self.driver = self.get_driver(url,i) #获取driver并且打开url def get_driver(self,url,i): if i == 1: driver = webdriver.Chrome() elif i == 2: driver = webdriver.Firefox() else: driver = webdriver.Edge() driver.get(url) driver.maximize_window() return driver #输入用户信息 def send_user_info(self,key,data): self.get_user_element(key).send_keys(data) #定位用户信息,获取element def get_user_element(self,key): find_element = FindElement(self.driver) user_element = find_element.get_element(key) return user_element #获取随机数 def get_range_user(self): user_info = ''.join(random.sample('1234567890abcdefghijklmn',8)) return user_info #获取图片 def get_code_image(self,file_name): self.driver.save_screenshot(file_name) code_element = self.get_user_element("code_image") left = code_element.location['x'] top = code_element.location['y'] right = code_element.size['width']+left height = code_element.size['height']+top im = Image.open(file_name) img = im.crop((left,top,right,height)) img.save(file_name) #解析图片获取验证码 def code_online(self,file_name): self.get_code_image(file_name) r = ShowapiRequest("http://route.showapi.com/184-4","62626","d61950be50dc4dbd9969f741b8e730f5" ) r.addBodyPara("typeId", "35") r.addBodyPara("convert_to_jpg", "0") r.addFilePara("image", file_name) #文件上传时设置 res = r.post() print(res.text) text = res.json()['showapi_res_body']['Result'] return text def main(self): user_name_info = self.get_range_user() user_email = user_name_info+"@163.com" file_name = "E:/Teacher/Imooc/SeleniumPython/Image/test02.png" #code_text = self.code_online(file_name) self.send_user_info('user_email',user_email) self.send_user_info('user_name',user_name_info) self.send_user_info('password',"111111") self.send_user_info('code_text',"11111") self.get_user_element('register_button').click() code_error = self.get_user_element("code_text_error") if code_error == None: print("注册成功") else: self.driver.save_screenshot("E:/Teacher/Imooc/SeleniumPython/Image/codeerror.png") time.sleep(5) self.driver.close() if __name__ == '__main__': for i in range(3): register_function = RegisterFunction('http://www.5itest.cn/register',i) register_function.main()
[RegisterElement] user_email=id>register_email user_email_error=id>register_email-error user_name=id>register_nickname user_name_error=id>register_nickname-error password=id>register_password password_error=id>register_password-error code_image=id>getcode_num code_text=id>captcha_code code_text_error=id>captcha_code-error register_button=id>register-btn
重构封装读取配置文件方法.
import configparser # cf=configparser.ConfigParser() # cf.read("ini文件路径 e:/123.ini") # cf.get("RegisterElement","user_email") class ReadIni(): def load_ini(self,file_name): if file_name==None: file_name=r"F:\慕课网Selenium3与Python3实战Web自动化测试框架" self.cf=configparser.ConfigParser() self.cf.read(file_name) def get_value(self,node,key): if node==None: node="12345.ini" data=self.cf.get(node,key) return data if __name__=='__main__': read_init=ReadIni() print(read_init.get_value("user_name"))
设计封装定位元素类
#coding=utf-8 #封装类 from util.read_ini import ReadIni from log.user_log import UserLog class FindElement(object): def __init__(self,driver): self.driver = driver get_user_log = UserLog() self.logger = get_user_log.get_log() def get_element(self,key): read_ini = ReadIni() data = read_ini.get_value(key) by = data.split('>')[0] value = data.split('>')[1] self.logger.info("定位方式:"+by+"--->定位值:"+value) try: if by == 'id': return self.driver.find_element_by_id(value) elif by == 'name': return self.driver.find_element_by_name(value) elif by == 'className': return self.driver.find_element_by_class_name(value) else: return self.driver.find_element_by_xpath(value) except: return None
#coding=utf-8 #ini读取类 import configparser class ReadIni(object): def __init__(self,file_name=None,node=None): if file_name == None: file_name = "E:/Teacher/Imooc/SeleniumPython/config/LocalElement.ini" if node == None: self.node = "RegisterElement" else: self.node = node self.cf = self.load_ini(file_name) #加载文件 def load_ini(self,file_name): cf = configparser.ConfigParser() cf.read(file_name) return cf #获取value得值 def get_value(self,key): data = self.cf.get(self.node,key) return data #if __name__ == '__main__': # read_init = ReadIni() # print(read_init.get_value('user_name'))
如何将整个注册流程脚本进行模块化实战讲解
注册失败进行截图处理
多浏览器跑case
11111
浙公网安备 33010602011771号