#!/usr/bin/env python
# coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
m = webdriver.Safari()
def get_ele_times(driver, times, func):
# 一直执行函数func,直至func函数返回not false,或达到超时时间times
return WebDriverWait(driver, times).until(func)
def open_browser():
# 打开浏览器,并返回浏览器句柄(实例化一个浏览器对象)
webdriver_handle = webdriver.Firefox()
# 最大化浏览器窗口
webdriver_handle.maximize_window()
return webdriver_handle
def open_url(handle, url0):
# 打开网页
handle.get(url0)
def find_ele(d, **args):
"""
**表示需要传入字典
1、text_id
2、select_id
3、user_id
4、pwd_id
5、login_id
:return text_id,select_id,user_id,pwd_id,login_id
"""
if 'text_id_k' in args.keys():
# 需要先判断网站中是不有text_id,若有就进行登录操作,否则关闭浏览器,退出程序
text_id_v = get_ele_times(d, 10,
lambda d: d.find_element_by_xpath(args['text_id_k']))
text_id_v.click()
select_id_v = d.find_element_by_xpath(args['select_id_k'])
select_id_v.click()
user_id_v = d.find_element_by_xpath(args['user_id_k'])
pwd_id_v = d.find_element_by_xpath(args['pwd_id_k'])
login_id_v = d.find_element_by_xpath(args['login_id_k'])
# return返回的是一个元组
return user_id_v, pwd_id_v, login_id_v
def send_values(*tuple_ele1, **arg):
"""
:param tupleele: 表传入的是由要控制的页面元素组成的一个元组
:param arg: 传入用户数据列表list_date中的一个为字典的数据
:return:
"""
# tuple_ele1[0].clear()
# tuple_ele1[0].send_keys(arg['username'])
#
# 写一个循环,要遍历元组tuple_ele1,遍历字典arg:使用i作为元组的索引,
i = 0
for key in arg.keys():
tuple_ele1[i].clear()
tuple_ele1[i].send_keys(arg[key])
i += 1
tuple_ele1[i].click()
def check_result(d, text):
try:
d.find_element_by_link_text('请您输入验证码')
print('请您输入验证码')
except:
d.find_element_by_link_text('hyh')
print('登录成功')
def login_test(dict_ele1, list_date1):
d = open_browser()
open_url(d, dict_ele['url'])
tuple_ele = find_ele(d, **dict_ele)
for arg in list_date1:
# 有多组数据需要输入时,应循环遍历"list_date"列表中的所有元素
send_values(*tuple_ele, arg)
check_result(d, '请输入验证码')
if __name__ == "__main__":
url = "https://baidu.com/"
login_id1 = "/html/body/div[1]/div[1]/div/div[3]/a[7]"
select_id = "//*p[@title='用户名登录']"
user_id = "//*[@id='TANGRAM__PSP_10__userName']"
pwd_id = "//*[@id='TANGRAM__PSP_10__password']"
login_id2 = "//*[@id=1TANGRAM__PSP_10__submit']"
username = 'hyh'
pwd = '123'
username1 = 'hyh1'
pwd1 = '456'
dict_ele = {'url': url, 'text_id_k': login_id1, 'select_id_k': select_id, 'user_id_k': user_id,
'pwd_id_k': pwd_id, 'login_id_k': login_id2}
list_date = [{'username': username, 'pwd': pwd}, {'username1': username1, 'pwd1': pwd1}]
login_test(dict_ele, list_date)
练手1:python3+selenium
最新推荐文章于 2024-04-30 23:10:06 发布