selenium(2)-selenium针对浏览器的操作有哪些
对浏览器有哪些操作
- 最大化、最小化浏览器
- 控制、获取浏览器大小
- 获取当前标签页title、url
- 前进、后退、刷新
- 执行js语句
- 打开、关闭,切换新标签页
- 滚动页面
- 上传附件
- 鼠标悬停
- 对话框的定位方式
- 选择框的操作
- 其他一些操作
最大化最小化浏览器
1 from time import sleep 2 from selenium import webdriver 3 4 # 加载浏览器驱动 5 driver = webdriver.Chrome("../resources/chromedriver.exe") 6 7 # 访问网址 8 driver.get("https://www.baidu.com") 9 10 # 最大化浏览器 11 driver.maximize_window() 12 13 sleep(2) 14 15 # 最小化浏览器 16 driver.minimize_window()
控制获取浏览器大小
# 加载浏览器驱动 driver = webdriver.Chrome("../resources/chromedriver.exe") # 访问网址 driver.get("https://www.baidu.com") # 获取浏览器大小 size = driver.get_window_size() print(f"浏览器大小:{size}") sleep(2) # 设置浏览器大小 driver.set_window_size(1200, 1000)
结果执行
浏览器大小:{'width': 1936, 'height': 1056}
小结:get_window_size() 返回的是字典
获取当前标签页url , title
# 加载浏览器驱动 driver = webdriver.Chrome("../resources/chromedriver.exe") # 访问网址 driver.get("https://www.baidu.com") # 获取当前标签页的title print(f"标签页title:{driver.title}") # 获取当前标签页的url print(f"标签页url:{driver.current_url}") # 获取当前浏览器的名称(不常用) print(f"标签页name:{driver.name}") # 获取当前页面完整的HTML代码 print(f"标签页page_source:{driver.page_source}")
结果执行
标签页title:百度一下,你就知道 标签页url:https://www.baidu.com/ 标签页name:chrome 标签页page_source:<html><head>...</head></html>
前进,后退,刷新
1 # 前进 2 driver.forward() 3 4 # 后退 5 driver.back() 6 7 # 刷新 8 driver.refresh()
执行js语句
# 同步执行js js='console.log(2)' driver.execute_script(js) # 异步执行js driver.execute_async_script("alert(2)")
关闭,打开,切换新标签页
1 # 打开新的标签页 2 js = 'window.open("https://www.baidu.com/")' 3 driver.execute_script(js) 4 5 # 获取当前标签页句柄 6 print(driver.current_window_handle) 7 8 # 获取浏览器所有标签页句柄 9 handles = driver.window_handles 10 print(handles) 11 12 # 切换标签页 13 driver.switch_to.window(handles[-1]) 14 15 # 关闭当前标签页 16 driver.close()
知识小结:
- 打开新的标签页只能通过 js 来操作
- 可以根据标签页的句柄来切换标签页
- 操作标签页的好处就是,可以只打开一个浏览器但可以访问多个不同的网页;这在后续集成单元测试框架(unittest、pytest)的时候会有很大的帮助
滚动页面(三种方法)
# 滚动随机高度(100-999的随机高度) js = "var q=document.documentElement.scrollTop=" + random.randint(100, 999) driver.execute_script(js)
2 滚动条手动到指定的位置,这种方法更常用 target = driver.find_element_by_id("id_keypair") driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
1 3 发送tab键 2 from selenium.webdriver.common.keys import Keys 3 driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)
上传附件
1 文件上传需要安装pypiwin32 2 pip install pypiwin32 3 4 5 import win32com.client 6 shell = win32com.client.Dispatch('wScript.shell') 7 shell.Sendkeys(r"d:\timg.jpg")
鼠标悬停
1 # 导入selenium 2 from selenium import webdriver 3 driver = webdriver.Chrome() 4 # selenium中的actionchains的方法 5 from selenium.webdriver.common.action_chains import ActionChains 6 driver.get('URL') 7 driver.maximize_window() 8 # 识别需要悬停的元素 9 ele = driver.find_element_by_link_text('广微数据') 10 # 鼠标移到悬停元素上 11 ActionChains(driver).move_to_element(ele).perform()
对话框的操作方式
有三种类型的对话框 alert,confirm,prompt
alert-浏览器原生对话框定位方式
1 浏览器原生对话框操作方法 2 driver.switch_to.alert.accept() 点击OK 3 driver.switch_to.alert.text 得到对话框内容 4 driver.switch_to.alert.dismiss() 点击cancel 5 driver.switch_to.alert.send_keys() 输入内容
confirm,prompt HTML元素对话框使用xpath,css定位
选择框的操作
单选框的操作
- 单选框,一般默认选中其中1个
- 点击选择时,有且只能选中1个,所以再操作时,无须判断是否存在默认值
-
- 举例,选择女性
driver.find_element_by_css_selector('input[value="female"]').click()
多选框的操作
- 如果选择某一项,点击该项,会取消选中
- 如果该项未选中,点击该项,会被选中
- 查看上述截图,我们会发现默认选中的会存在1个 checked的属性
1 将默认选中的点选,即取消选中 2 driver.find_element_by_xpath('//*[@name="course"][@checked]').click() 3 然后勾选我们想要的元素 4 5 driver.find_element_by_css_selector('input[value=python]').click() 6 driver.find_element_by_css_selector('input[value=selenium]').click()
复选框的操作
点击该项,即可选中
已选中的再次点击,不会取消选中
按住键盘CTRL键可实现多选
- 若实现对复选框的操作,需要导入Select类:from selenium.webdriver.support.ui import Select
from selenium import webdriver # 导入 Select from selenium.webdriver.support.ui import Select driver = webdriver.Chrome() # 打开网址;地址需要修改 driver.get('http://xxxxx:9000/zentao') # 获得相应的WebElement select = Select(driver.find_element_by_id("select")) # 先取消选择所有的选项 select.deselect_all() # 通过文本选中 玛莎拉蒂 select.select_by_visible_text("玛莎拉蒂") # 通过 value 值选中 兰博基尼 select.select_by_value("Lamborghini") # 通过 index 选择元素,索引从0开始 select.select_by_index(2) driver.quit()
下拉框
1 from time import sleep 2 3 from selenium.webdriver.support.select import Select 4 from selenium import webdriver 5 6 driver = webdriver.Chrome("../resources/chromedriver.exe") 7 8 # 将html文件更改为自己的路径 9 driver.get("file:///C:/下拉框.html") 10 driver.maximize_window() 11 12 # 找到select标签元素 13 pro = Select(driver.find_element_by_id("pro")) 14 15 # 返回所有选项 16 for option in pro.options: 17 print(option.text) 18 19 # 返回所有被选中的选项 20 for option in pro.all_selected_options: 21 print(option.text) 22 23 # 通过value选中 24 pro.select_by_value("bj") 25 sleep(1) 26 27 # 通过index选中 28 pro.select_by_index(1) 29 sleep(1) 30 31 # 通过标签文本选中 32 pro.select_by_visible_text("广东")
其他一些操作
1 perform(self): ---执行链中的所有动作 2 reset_actions(self): ---清除存储在远端的动作 3 click(self, on_element=None): ---鼠标左键单击 4 click_and_hold(self, on_element=None): --鼠标左键单击,不松开 5 context_click(self, on_element=None): ---鼠标右键单击 6 double_click(self, on_element=None): ---鼠标左键双击 7 drag_and_drop(self, source, target): ---拖拽到某个元素后松开 8 drag_and_drop_by_offset(self, source, xoffset, yoffset): ---拖拽到某个坐标后松开 9 key_down(self, value, element=None): ---某个键盘键被按下 10 key_up(self, value, element=None): ---松开某个键 11 move_by_offset(self, xoffset, yoffset): ---鼠标移动到某个坐标 12 move_to_element(self, to_element): ---鼠标移动到某个元素 13 move_to_element_with_offset(self, to_element, xoffset, yoffset): ---移动到距某个元素(左上角)多少的位置 14 release(self, on_element=None): ---在某元素上松开鼠标 15 send_keys(self, *keys_to_send): ---发送某些值到当前焦点元素 16 send_keys_to_element(self, element, *keys_to_send): ---发送某些值到指定元素
举例:ActionChains(driver).click(clk_btn).context_click(right_btn).perform()
right_click = driver.find_element_by_xpath('//a[@name="tj_trnews"]')
ActionChains(driver).context_click(right_click).perform()