使用示例首先来看一个 selenium 的使用示例: import time# 导入浏览器驱动from selenium import webdriver# 使用浏览器驱动实例化一个谷歌浏览器驱动对象: driver,所有关于浏览器的操作,都由driver对象完成driver = webdriver.Chrome()try: # 打开浏览器,访问指定的url driver.get('https://www.baidu.com/') # 你对当前的页面要做的操作 input_obj = driver.find_element_by_id('kw') print(input_obj) input_obj.send_keys('听雨危楼') time.sleep(2) driver.find_element_by_id('su').click() time.sleep(2) driver.find_element_by_xpath('//*[@id='1']/h3/a').click()finally: time.sleep(10) # 关闭浏览器 driver.close() 在下面的讨论中,如无特别声明,我将使用 driver 指代浏览器驱动对象,而不会每次都创建。而且使用完毕后,都会关闭掉驱动,关闭操作也先不写了。 常用类
浏览器页面操作from selenium import webdriver # 驱动浏览器from selenium.webdriver import ActionChains # 鼠标的相关操作,比如滑动验证from selenium.webdriver.common.by import By # 选择器,以什么方式选择标签元素from selenium.webdriver.common.keys import Keys # 键盘相关from selenium.webdriver.support import expected_conditions as EC # 各种判断,一般跟等待事件连用,比如说等待某个元素加载出来from selenium.webdriver.support.wait import WebDriverWait # 等待事件,可以与EC连用 浏览器页面操作
截屏操作# 获取截屏的字节流,需要我们手动写到文件中res = driver.get_screenshot_as_png()# print(res) # 图片二进制数据f = open('a.png', 'wb')f.write(res)# 直接保存截屏,图片的格式为pngdriver.save_screenshot('b.png')# 截屏某个元素driver.find_element_by_id('login_box').screenshot('c.png') 选择器选择器用来找到页面中的某个指定到标签。find_element_by_xxx 只会找到第一个符合条件的标签,返回的将是一个标签对象;而 find_elements_by_xxx 返回的则是一个列表,列表里面装的是所有符合条件的标签。
By上面介绍的各种标签选择器全部都可以通过 By 来调用: from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Firefox()driver.get('https://www.baidu.com/')# driver.find_element_by_id('su')driver.find_element(By.ID, 'kw').send_keys('抠脚')driver.find_elements(By.ID, 'kw')[0].send_keys('抠脚')# By.ID# By.CLASS_NAME# By.LINK_TEXT# By.NAME# By.XPATH# By.CSS_SELECTOR 鼠标事件如果是简单的鼠标左键点击,可以直接使用标签的 click 方法实现:
动作链 ActionChains 用来实现鼠标事件。鼠标事件有很多,包括点击拖动等。注意鼠标事件设置好后,要使用 perform 方法执行生效。 from selenium.webdriver import ActionChains # 鼠标相关的操作都在这里# 左键单击a1 = driver.find_element_by_xpath('/html/body/form/input[3]')ActionChains(driver).click(a1).perform()# 左键双击a2 = driver.find_element_by_xpath('/html/body/form/input[2]')ActionChains(driver).double_click(a2).perform()# 右键单击a3 = driver.find_element_by_xpath('/html/body/form/input[4]')ActionChains(driver).context_click(a3).perform()# 移动鼠标ActionChains(driver).move_to_element(li).perform()# 拖拽a = driver.find_element_by_id('draggable')time.sleep(1)b = driver.find_element_by_id('droppable')time.sleep(1)ActionChains(driver).drag_and_drop(a, b).perform() 鼠标事件所有方法:
键盘事件键盘事件是标签对象的方法,应用最多的是向 input 框中输入数据。 from selenium.webdriver.common.keys import Keys# 获取input标签user = driver.find_element_by_id('id_username')user.send_keys('alexdsb') # 向input标签中输入内容user.send_keys(Keys.CONTROL, 'a') # 在input标签中使用快捷键 ctrl + auser.send_keys(Keys.DELETE) # 按下delete键user.send_keys(Keys.BACKSPACE) # 按下backspace键user.send_keys(Keys.ENTER) # 按下回车键user.send_keys(Keys.TAB, 'ABC') # TAB之后,输入值user.send_keys(Keys.TAB, Keys.ENTER) # tab之后,直接回车# 上传文件流程:1.访问url,2.获取input框,3.输入文件路径,4.点击上传obj = driver.find_element_by_css_selector('input[name='excel']')file_path = r'C:\Users\Administrator\Desktop\接口测试示例.xlsx'obj.send_keys(file_path) 键盘操作所有方法:
窗口切换要注意,Selenium 是无法找到 iframe 中的标签的,需要切换到 iframe 中,才能进行后续的查找。 driver.switch_to.window('窗口ID') # 切换到指定的窗口对象中,current_window_handle和window_handles属性可得到driver.switch_to.frame(<frame标签对象>) # 切换到指定的iframedriver.switch_to.alert() # 切换到alertdriver.switch_to.default_content() # 切换到之前的页面中driver.switch_to.parent_frame() # 切换到它爹的iframe 滚动条操作通过 js 注入的方式,滚动滚动条。
直接滚动到页面底部: driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') |
|