目录
# 常规元素操作行为:Selenium本身就是用于模拟人的操作行为,遇到不知道怎么处理的,参考人类的使用习惯
from time import sleep
from selenium import webdriver
# chrome
from selenium.webdriver import ActionChains
from selenium.webdriver.support.select import Select
options = webdriver.ChromeOptions()
options.add_argument('start-maximized')
driver = webdriver.Chrome(options = options)
# sleep(5)
1.窗体最大化
# 不要用,在selenium2开始就存在一个bug,调用窗体最大化时会造成driver的超时异常
# driver.maximize_window()
2.设置窗体大小尺寸
# driver.set_window_size(800,1000)
3.访问url以及文件
# driver.get('http://39.98.138.157/shopxo/index.php')
# driver.get(r'file:///D:/hhh.html')
driver.get('https://www.baidu.com/')
4.窗体最小化 不实用 不如不用
# driver.minimize_window()
5.浏览器操作,前进后退以及刷新
# driver.forward()
# driver.back()
# driver.refresh()
6.获取title:
# 用于在调试的时候可以判断一下,仅此而已,不代表可以用于断言
print(driver.title)
7.元素定位
# driver.find_element() # 定位单个元素,如果同时有多个元素满足条件,定位第一个发现的元素并返回
# driver.find_elements() # 定位符合条件的所有元素,最终以list的格式返回.如果要操作其中的元素,需要通过下标
8.获取到元素之后的操作行为
1.输入操作
# test = driver.find_element('name','wd').send_keys('虚竹')
# print(test)
2.文件上传
# 如果在系统操作中遇到文件上传的操作,如果是input标签则可以通过sendkeys直接操作,非input标签,弄死开发,或者用autoIT去解决
# driver.find_element('xpath','//span[@class="soutu-btn"]').click()
# driver.find_element('xpath','//input[@value="上传图片"]').send_keys(r'E:\美图小殿\2020\2020.8\司小幽.jpg')
3.点击
# 如果有点击的需求,统一通过click()来实现
# driver.find_element().click()
4.操作下拉列表框
1.悬停在设置元素上
# 悬停操作时,鼠标不要在driver的浏览器中移动
ActionChains(driver).move_to_element(driver.find_element('xpath','//span[text()="设置"]')).perform()
2.点击高级搜索
driver.find_element('link text','高级搜索').click()
'''
下拉列表框分为以下三种:
1.基于input标签实现的下拉列表框
2.基于Select标签实现的
3.基于其他标签实现的
'''
3.常见的下拉列表框操作一
sleep(1)
driver.find_element('xpath','//span[text()="全部时间"]').click()
driver.find_element('xpath','//p[text()="最近一月"]').click()
4.常见的下拉列表框操作二:input标签
# 一般input下拉列表框是具有只读属性,无法直接通过send_keys输入,输入前需要remove只读属性,此方法如果无效,使用两次click方法解决
# driver.find_element('xpath','//input[text()="全部时间"]').send_keys("最近一月")
5.Select标签下拉列表框
# 如果你的系统有这个东西,也就意味着他比你的工作年限还要长的多
# select = Select(driver.find_element('id','cityId'))
# # 选择值
# # 通过下标选择
# select.select_by_index(5)
# # 通过value选择
# select.select_by_value(12)
# # 通过文本选择
# select.select_by_visible_text('成都')
5.退出浏览器
# driver.close()
driver.quit()
'''
新页面的访问:selenium访问新页面的时候,默认停留在老页面中,每个页面都有一个句柄,要操作哪个页面就切换到哪个句柄
句柄的切换业务下,需要时刻记住,标签页最多保留不超过2个,一般在访问新标签页之前,要close掉旧的标签页
内嵌窗体的元素操作:有一种场景下,你元素定位是正确的,并且再三确认过的,但是运行到这里就是找不到元素,也等待了,也排查了,也让虚竹看了。这时候
需要思考下,是不是有iframe呢?
'''
9.句柄
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
sleep(2)
driver.maximize_window()
# driver.get("http://www.baidu.com")
# driver.find_element('id','kw').send_keys('虚竹')
# driver.find_element('id','su').click()
# driver.close()
#访问新页面前
# print(driver.window_handles)
# driver.find_element('xpath','//*[@id="1"]/div/div/h3/a').click()
# sleep(3)
# print(driver.title)
1.句柄获取
# handles = driver.window_handles
# 访问新页面后
# print(handles)
2.关闭当前标签页
# driver.close()
3.句柄切换
# driver.switch_to.window(handles[1])
# print(driver.title)
10.iframe处理
driver.get('https://music.163.com/')
driver.find_element('link text','登录').click()
driver.find_element('link text','选择其他登录模式').click()
driver.find_element('id','j-official-terms').click()
driver.find_element('partial link text','QQ登录').click()
sleep(1)
1.句柄获取
handles = driver.window_handles
# 访问新页面后
# print(handles)
2.关闭当前标签页
# driver.close()
3.句柄切换
driver.switch_to.window(handles[1])
# print(driver.title)
4.iframe
#如果元素在iframe标签中,需要先切换至iframe,再进行定位
driver.switch_to.frame('ptlogin_iframe')
driver.find_element('xpath','//*[@id="qlogin_list"]/a').click()
# 切换到默认窗体:只有切换回来以后才可以继续操作页面中iframe以外的内容
driver.switch_to.default_content()
'''
Selenium4中新增的有用的操作行为:针对于浏览器与标签页的
'''
11.Selenium4实用方法
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
sleep(3)
# 自动生成新的标签页,并切换过去
# driver.switch_to.new_window('tab')
driver.switch_to.new_window('window')
print(driver.window_handles)
driver.get('http://www.baidu.com')
driver.switch_to.window(driver.window_handles[0])