概述:Overview是一个开源自动化框架,模拟用户与浏览器交互的行为,主要用于界面的自动浏览器兼容性测试。 它封装了浏览器的原生形式,充当编程语言和浏览器之间的沟通桥梁,以完成让浏览器工作的目的。
Selenium 概述
Selenium 是一个开源 Web 自动化框架,用于模拟用户与浏览器交互的行为。 这主要用于界面自动化和浏览器兼容性测试。 优点: 1、跨平台,如Windows、Linux、Mac。 2.支持Chrome、Firefox、Edge、IE、Oear等多种浏览器。 3.完全开源。 webdriver:将浏览器原生API封装成WebDriver API。 WebDriver API充当编程语言和浏览器之间的桥梁,用于与浏览器交互。 注意:不同的浏览器需要不同的网络驱动程序。 此外,Web 驱动程序版本号必须与浏览器版本号相对应。
Selenium 操作浏览器 1、启动浏览器
引导包:
from selenium import webdriver 1)直接指定驱动路径
本文以 Chrome 浏览器为例
driver = webdriver.Chrome(executable_path="driver path") 2) 设置驱动程序环境变量
将Webdriver部署路径添加到环境变量中。 添加环境变量的步骤:桌面—>我的电脑—>属性—>高级系统设置->环境变量->查找并选择系统变量路径->点击编辑->新建->保存。
建议:通常,放置与浏览器相对应的驱动程序文件。 直接在Python中获取版本如果将其保存到安装目录中,则无需再次添加环境变量(我的典型方法)。 设置环境变量后,无需再次指定驱动路径。
driver = webdriver.Chrome() 2. 打开网页 URL driver.get("http://xxxx")。 3. 其他浏览器控件 driver.maximize_window( ) # 最大化浏览器 driver.minimize_window() # 最小化浏览器 driver.set_window_size(1980,1080) # 指定浏览器大小 4. 无界面操作 options = webdriver .ChromeOptions()options.add_argument ("[ k4][ k4]headless") # 设置 Interfaceless driver=webdriver.Chrome(chrome_options=options) 5. 关闭浏览器。
close():关闭当前浏览器窗口 quit():关闭所有页面。 关闭浏览器 6.其他操作 正向:driver.forward() 反向:driver.back() 刷新:driver.refresh()
元素放置 1.传统放置方法 driver.find_element_by_id() find_element_by_name() driver。 .find_element_by_css_selector( )driver.find_element_by_tag_name()driver.find_element_by_class_name()driver.find_element_by_xpath()driver.find_element_by_link_text()driver.find_element_by_partial_link_text():模糊查询
注:查找详情元素:只需将上述放置方法中的元素更改为类似 driver.find_elements_by_name() 的内容,不带唯一属性 ID。
2.xpath放置方法
**绝对路径:**" / " 就是 /html/body/table/tbody/tr[2]/td[2]/div/div[2]/ 这个表示逐层查找HTML标签,如table[2]/thead/tr/。 [1] **相对路径:**用“//”表示任意位置,按照指定路径匹配节点,如下: //*[@id="fileID"] 如何放置常用函数: contains 方法(例如使用 xpath=//input[contains(@id,'abcd')]) text() 方法(例如 xpath= //button [text()='save']) 使用starts- with 方法(另一个原因与ends-with 相同)。 这主要用在元素的属性部分发生改变的时候,比如:
# 示例:id=abcd12312sdfsf342xpath=//input[starts -with(@id,"abcd" )]
元素必须使用多个属性值进行定位。 您可以像这样使用“and”:
//span[@id="fileID] " 和 @class="classname"] 3. css 放置 常用的有以下几种: 选择类:find_element_by_css_selector(".slg") 选择ID:find_element_by_css_selector("#su") 选择标签:find_element_by_css_selector("input ") 选择属性:find_element_by_css_selector("[name='kw' ]") 层次关系:find_element_by_css_selector(“跨度>infind_element_by_css_selector(“form>input:nth-child(2)”) 查找#form标签下的第二个input元素组合选择:find_element_by_css_selector(“form.fm>span>input.slg”) 其他方法:find_element_by_css_selector(" [class*=swait_lg]"),查找包含“swait_lg”的类属性。 find_element_by_css_selector("[class^=bba]"),以“bba”开头 find_element_by_css_selector("[class$=abb]"),以“abb”开头...
元素操作
Click : click( ) 清除原始内容:clear() 输入值:send_keys() 获取内容:text 获取元素的属性:get_attribute() 元素显示:is_displayed( )
焦点转换
1 前进到弹窗:
ele = driver.switch_to.alertele.accept() # 接受 ele.text # 获取弹窗内容 ele.dismiss() # 退出或取消
2. 页内焦点切换:driver.switch_to.frame(frame) 退出当前焦点窗口,返回原窗口:driver.switch_to.default_content() 3.多窗口切换:
driver.switch_to.handles= driver.window_handles()driver.switch_to.window(handles[-1]) 等待
Selenium 有三种等待方法: 1. 强制等待
time.sleep(2)
2. 显示等待(特定元素的一部分)
WebdriverWait(driver,5,0.5).until(lambda driver:driver.find_element_by_xpath())
3.全局,可以解决大部分元素等待问题)
driver.implicitly_wait(20) 截图
1. 捕获整个网页:
driver.get_screenshot_as_base64() # 保存Base64编码格式 driver.save_screenshot( "XX/XX.png") # 如果出现警告等弹出对话框后进行截图,程序会抛出异常 driver.get_screenshot_as_png() # 保存的是二进制数据,必须写入为映像文件以保存驱动程序。 get_screenshot_as_file("XX/XX.png") # 获取当前窗口的屏幕截图。 如果截图成功则返回True。 如果发生 IOError,则返回 False。
2. 截屏:
ele.screenshot()ele = driver. find_element_by_id("msg")ele.screenshot("./3.png") 鼠标键盘操作
常用工具:动作链、pymouse、pykeyboard、pyautogui 1、动作链常用鼠标操作: 单机版:click()双击:double_click( ) 移动到元素:move_to_element 将鼠标移到元素上:click_and_hold 将元素拖动到另一个元素:drag_and_drop 用法:
from selenium.webdriver.common.action_chains import actionChainsActionChains(driver).context_click(driver.find_element_by_id("su")).perform()
注意:所有鼠标事件都调用perform()来执行ActionChains中存储的所有动作
2.键盘操作:
from selenium.webdriver.common.keys import Keyssend_keys(Keys.ENTER) # 键盘回车事件 send_keys(Keys.BACKSPACE) # 删除、回滚 # 使用send_keys(Keys.CONTROL," 组合a ") # 选择全部 send_keys(Keys.CONTROL,"c") # 复制并调用 JS 方法
用法: driver.execute_script(js code) 更改只读属性如下: driver.execute_script("document.getElementById (/ "su/").readOnly=0;") 转到页面底部
driver.excute_script("window.scrollTo(0,document.body.scrollHeight)")
注意:这个文章是在工作中学习的,使用了常见的 Selenium 方法。 如有错误,请指出。
评论前必须登录!
注册