+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

Selenium常用方法

**一、常用库导入** ``` #导入webdriver模块 from selenium import webdriver #导入动作链类,动作链可以储存鼠标的动作,并一起执行 from selenium.webdriver import ActionChains #键盘操作使用的是Keys类,一般配合send_keys使用 from selenium.webdriver.common.key import Key #下拉框的操作都交由Select类进行处理 from selenium.webdriver.support.select import Select from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait #显示等待使用的类 from selenium.webdriver.support import expected_conditions as EC ``` **二、基本操作** 1.浏览器相关操作 + 创建浏览器对象  driver = webdriver.xxx() + 窗口最大化    maximize_window() + 获取浏览器尺寸  get_window_size() + 设置浏览器尺寸  set_window_size() + 获取浏览器位置  get_window_position() + 设置浏览器位置  set_window_position(x,y) + 关闭当前标签/窗口 close() + 关闭所有标签/窗口  quit() ``` #导入webdriver from selenium import webdriver #创建一个浏览器对象 driver = webdriver.Firefox() #设置全屏 driver.maximize_window() #获取当前浏览器尺寸 size = driver.get_window_size() #设置浏览器尺寸 driver.set_window_size(400, 400) size = driver.get_window_size() #获取浏览器位置 position = driver.get_window_position() #设置浏览器位置 driver.set_window_position(100,200) #关闭浏览器 driver.quit() driver.close() ``` 2.页面相关操作 + 请求某个url      driver.get(url) + 刷新页面操作     refresh() + 回退到之前的页面   back() + 前进到之后的页面   forward() + 获取当前访问页面url  current_url + 获取当前浏览器标题  title + 保存图片       get_screenshot_as_png()/get_screenshot_as_file(file) + 网页源码       page_source ``` #导包 from selenium import webdriver import time #创建浏览器对象 driver = webdriver.Firefox() #访问百度 url1 = 'http://www.baidu.com' driver.get(url1) print('访问:',url1) #访问知乎 url2 = 'https://zhuanlan.zhihu.com/' time.sleep(2) driver.get(url2) print('访问:',url2) #后退操作 time.sleep(2) driver.back() print('后退到',url1) #前进 time.sleep(2) driver.forward() print('前进到',url2) #显示当前的url print(driver.current_url) #显示当前的页面标题 print(driver.title) #保存快照操作 #自动写文件 driver.get_screenshot_as_file('baidu.jpg') #自己写文件 data = driver.get_screenshot_as_png() with open('baidu2.jpg','wb') as f: f.write(data) data = driver.page_source #以二进制类型写入文件 with open('baidu.html','wb') as f: f.write(data.encode()) ``` 3.页面元素的定位(八种定位方式) + id定位       driver.find_element_by_id(value) + name属性值定位  driver.find_element_by_name(value) + 类名定位      driver.find_element_by_class_name(value) + 标签名定位     driver.find_element_by_tag_name(value) + 链接文本定位    driver.find_element_by_link_text(value) + 部分链接文本    driver.find_element_by_partial_link_text(value) + xpath路径表达式  driver.find_element_by_xpath(value) + css选择器     driver.find_element_by_css_selector(value) 4.元素的操作 对元素的相关操作,一般要先获取到元素,再调用相关方法 element = driver.find_element_by_xxx(value) + 点击操作    element.click() + 清空输入框   element.clear() + 输入框输入数据 element.send_keys(data) + 获取文本内容(既开闭标签之间的内容)  element.text + 获取属性值(获取element元素的value属性的值)  element.get_attribute(value) ``` from selenium import webdriver import time #创建一个浏览器 driver = webdriver.Firefox() #访问百度 url = 'http://www.baidu.com' driver.get(url) #定位到输入框 el = driver.find_element_by_id('kw') #输入selenium el.send_keys('selenium') #清空操作 el.clear() #输入python el.send_keys('python') #定位到搜索按钮 el_sub = driver.find_element_by_id('su') #调用提交 el_sub.click() time.sleep(5) driver.close() ``` 5.鼠标和键盘操作 鼠标操作需要导入类,见第一部分,然后创建对象ActionChains(driver),键盘操作导入类见第一部分 + 鼠标右击 ``` el = driver.find_element_by_xxx(value) context_click(el) ``` + 鼠标双击 ``` el = driver.find_element_by_xxx(value) ActionChains(driver).double_click(el).perform() ``` + 鼠标悬停 ``` el = driver.find_element_by_xxx(value) ActionChains(driver).move_to_element(el).perform() ``` 常用键盘操作 + send_keys(Keys.BACK_SPACE) 删除键(BackSpace) + send_keys(Keys.SPACE) 空格键(Space) + send_keys(Keys.TAB) 制表键(Tab) + send_keys(Keys.ESCAPE) 回退键(Esc) + send_keys(Keys.ENTER) 回车键(Enter) + send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A) + send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C) + send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X) + send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V) ``` from selenium import webdriver #导入动作链类 from selenium.webdriver import ActionChains #开浏览器 driver = webdriver.Firefox() #访问百度 url = 'http://www.baidu.com' driver.get(url) #定位到logo元素 el_logo = driver.find_element_by_css_selector('#lg > map:nth-child(2) > area:nth-child(1)') #鼠标右击操作,操作元素前,需要将操作的元素定位出来并且穿入相应的动作中,如果要执行操作,需要调用perform() ActionChains(driver).context_click(el_logo).perform() #双击定位到的元素,进行切换 ActionChains(driver).double_click(el_logo).perform() #开一个浏览器 driver = webdriver.Firefox() driver.maximize_window() #访问京东 url = 'http://www.jd.com' driver.get(url) #获取分类组元素 el_list = driver.find_elements_by_class_name('cate_menu_item') #鼠标悬停 for el in el_list: ActionChains(driver).move_to_element(el).perform() time.sleep(1) driver.quit() ``` 6.弹出框操作 + 进入到弹出框中  driver.switch_to.alert() + 接收警告     accept() + 关闭警告     dismiss() + 发送文本到警告框 send_keys(data) 7.下拉框操作 + 将定位到的下拉框元素传入Select类中  selobj = Select(element) + 通过索引选择,index 索引从 0 开始  select_by_index() + 通过值选择(option标签的一个属性值)  select_by_value() + 通过文本选择(下拉框的值)  select_by_visible_text() + 查看所有已选  all_selected_options + 查看第一个已选  first_selected_option + 查看是否是多选  is_multiple + 查看选项元素列表  options + 取消选择   deselect_by_index() /deselect_by_value()/ deselect_by_visible_text() 8.滚动条操作 ``` #x为水平拖动距离,y为垂直拖动举例 js = "window.scrollTo(x,y) " driver.execute_script(js) #n为从顶部往下移动滚动举例 js= "var q=document.documentElement.scrollTop=n" driver.execute_script(js) ``` 9.cookies操作 + 获取所有cookies  get_cookies() + 获取key对应的值  get_cookie(key) + 设置cookies  add_cookie(cookie_dict) + 删除指定名称的cookie  delete_cookie(name) + 删除所有cookie  delete_all_cookies() 10.多标签/多窗口、多表单/多框架切换 多表单/多框架切换: 直接使用id值切换进表单 ``` driver.switch_to.frame(value) ``` 定位到表单元素,再切换进入 ``` el = driver.find_element_by_xxx(value) driver.switch_to.frame(el) ``` 跳回最外层的页面 ``` driver.switch_to.default_content() ``` 跳回上层的页面 ``` driver.switch_to.parent_frame() ``` 多标签/多窗口之间的切换 获取所有窗口的句柄: ``` handles = driver.window_handlers ``` 通过窗口的句柄进入的窗口 ``` driver.switch_to.window(handles[n]) ```
我的笔记