from selenium import webdriver #从selenium中导入webdriver包
#创建一个谷歌浏览器的对象,driver就是对象,可以自定义
driver = webdriver.Chrome()
# 使用谷歌浏览器打开百度首页网址
driver.get('https://www.baidu.com')
driver.maximize_window() #浏览器窗口最大化
selenium中9大元素定位方法
# 1、id定位
driver.find_element_by_id('kw').send_keys('nba')
# 2、name定位
driver.find_element_by_name('wd').send_keys('库里')
#3、class定位
driver.find_element_by_class_name('s_ipt').send_keys('詹姆斯')
#4、link_text定位 精准匹配
driver.find_element_by_link_text('地图').click()
#5、partial_link_text定位 模糊定位
driver.find_element_by_partial_link_text('地').click()
# 6、JavaScript定位,var是定义变量的意思,a就是一个变量
js = 'var a = document.getElementById("kw").value="NBA"'
driver.execute_script(js)
# 7、tag_name定位,通过标签名定位
s = driver.find_elements_by_tag_name('input') #拿到页面中所有的input标签
print(type(s))
print(len(s))
for i in s:
if i.get_attribute('id')=='kw':
i.send_keys('NBA')
8、xpath定位,//表示相对路径,*号表示任意标签
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('nba')
driver.find_element_by_xpath('//input[@id="kw"]').send_keys('库里')
driver.find_element_by_xpath('//input[@name="wd"]').send_keys('汤普森')
driver.find_element_by_xpath('//*[@class="s_ipt"]').send_keys('詹姆斯')
driver.find_element_by_xpath('//*[@id="kw" and @class="s_ipt"]').send_keys('科比')
driver.find_element_by_xpath('//*[@id="form"]/span[1]/input[1]').send_keys('乔丹') #查找标签上上级
# css定位
driver.find_element_by_css_selector('#kw').send_keys('NBA')
driver.find_element_by_css_selector('.s_ipt').send_keys('科比')
driver.find_element_by_css_selector('[id=kw]').send_keys('乔丹')
driver.find_element_by_css_selector('[class=s_ipt]').send_keys('库里')
driver.find_element_by_css_selector('[name=wd]').send_keys('欧文')
driver.find_element_by_css_selector('[id=kw][class=s_ipt]').send_keys('詹姆斯')
driver.find_element_by_css_selector('form>span>input').send_keys('杜兰特') #逐级查找标签,输入
# 2、通过send_keys上传文件操作
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/upload_file.html')
driver.maximize_window()
elem = driver.find_element_by_id('file')
sleep(2)
elem.send_keys(r'C:\Users\Administrator\Desktop\bug模板.xlsx') #上传文件需要选择文件的绝对路径
# 3、定位百度搜索设置隐藏框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.maximize_window()
#第一种方法:点击有隐藏框的地方
driver.find_element_by_id('s-usersetting-top').click() #定位到,点击设置
sleep(2)
driver.find_element_by_link_text('搜索设置').click() #移动到设置上面然后执行
#第二种方法:鼠标移动到设置上面
from selenium.webdriver.common.action_chains import ActionChains
mouse = driver.find_element_by_id('s-usersetting-top') #定位到设置
sleep(2)
ActionChains(driver).move_to_element(mouse).perform() #移动到设置上面然后执行点击
sleep(2)
driver.find_element_by_link_text('搜索设置').click()
sleep(2)
driver.find_element_by_link_text('保存设置').click()
t = driver.switch_to.alert #切换到alert弹框上面,这个变量t就表示弹框
print(t.text) #打印alert弹框上面的文本信息
t.accept() #点击确定按钮
# 4、selenium当中的三种等待方法
from selenium import webdriver
from time import sleep
# #显示等待需要导入的模块
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By #导入BY类
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.maximize_window()
#以下是三种等待方式
sleep(5) #强制等待/线程等待/机械等待
driver.implicitly_wait(5) #隐式等待
WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
driver.find_element_by_id('kw').send_keys('NBA')
'''
1、sleep(5),线程等待,无论元素是否出现都默认等待5秒
2、driver.implicitly_wait(5) 隐式等待/智能等待,作用于全局元素
如果页面元素在5秒内加载完成,比如第一秒完成加载,则执行下一步指令,如果超过5秒没有加载完成则报错
3、WebDriverWait 显示等待,作用于单个元素
在5秒钟内指定的页面元素加载完成则继续执行下面的指令,每隔0.5秒执行一次,超过5秒就报错
'''
# 5、获取元素文本
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.maximize_window()
#第一种断言:
#获取百度首页hao123对应的元素文本值
value = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').text
# # 定义一个value变量来接收定位
print(value)
if value == 'hao123': #进行判断并输出
print('断言成功')
else:
print('断言失败')
#第二种断言:
#获取百度首页的title进行断言
title = driver.title #获取当前页面的title 标题
print(title)
assert title=='百度一下,你就知道'
# 6、基础命令获取元素
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('nba') #获取输框id
sleep(2)
driver.find_element_by_id('su').click() #点击搜素
sleep(2)
driver.refresh() #刷新指令
sleep(2)
driver.back() #返回指令
size = driver.get_window_size() #赋值给到size ,获取尺寸大小
print(size)
sleep(2)
driver.quit() #关闭网页指令
# 7、打开多窗口进行切换操作
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
win = 'window.open("https://www.taobao.com/")'
driver.execute_script(win)
#打开默认在第一个网站,这里是在百度网站
handle = driver.current_window_handle
all_handle = driver.window_handles
print(handle)
print(all_handle) #目的是判断当前窗口的句柄处于所有窗口句柄的位置
# title = driver.title #获取当前窗口的title来判断当前处于那个窗口
# print(title)
#第一种方法切换,根据句柄索引切换
driver.switch_to.window(all_handle[1])
title2 = driver.title
print(title2)
driver.find_element_by_name('q').send_keys('华伦天奴')
driver.find_element_by_class_name('btn-search').click()
第二种方法
for i in all_handle:
if i !=handle:
driver.switch_to.window(i)
title1 = driver.title
print(title1)
#8、定位到下拉框
from selenium import webdriver
from selenium.webdriver.support.select import Select #插入下拉款定位模块
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///C:/Users/Administrator/Desktop/select.html')
driver.maximize_window()
elem = driver.find_element_by_id('list') #定位到下拉框
sleep(2)
Select(elem).select_by_index(4) #通过索引查找元素,’5间房‘
sleep(2)
Select(elem).select_by_value('6') #通过value值查找元素’6间房‘
sleep(2)
Select(elem).select_by_visible_text('8间房') #通过文本查找元素’8间房‘
|
|