ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Selenium(五)】

【Selenium(五)】 一、鼠标事件from selenium import webdriver # 导入ActionChains类进行鼠标悬停操作 from selenium.webdriver.common.action_chains import ActionChains import time # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) time.sleep(2) # 定位到设置 st_buttondriver.find_element_by_id(s-usersetting-top) # 设置鼠标悬停 ActionChains(driver).move_to_element(st_button).perform()二、键盘事件# -*- coding: utf-8 -*- from selenium import webdriver # 导入Keys类调用键盘 from selenium.webdriver.common.keys import Keys import time # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) time.sleep(2) # 定位到设置,输入内容 search_boxdriver.find_element_by_id(kw) search_box.send_keys(seleniumABC) time.sleep(3) # 删除多余的m调用删除键 # Keys.BACK_SPACE只能删除一个字母要删除多个字母需要乘几 search_box.send_keys(3*Keys.BACK_SPACE) time.sleep(3) # 调用回车建 search_box.send_keys(Keys.ENTER)三、获取断言信息1通过文本信息判断# -*- coding: utf-8 -*- from selenium import webdriver # 导入Keys类调用键盘 from selenium.webdriver.common.keys import Keys import time # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) # 定位到设置,输入内容并搜索 search_boxdriver.find_element_by_id(kw) search_box.send_keys(python) search_box.send_keys(Keys.ENTER) # 搜索出来第一页的所有内容标题 # find_element_by_xpath定位元素的方法现实的是elements多个元素在一个列表中 titles driver.find_elements_by_xpath(//div[idcontent_left]//h3) print(titles) # 由于获取结果是列表要获取内容必须遍历列表一个一个获取 for t in titles: #获取文本信息 print(t.text)2通过title信息做断言# -*- coding: utf-8 -*- from selenium import webdriver # 导入Keys类调用键盘 from selenium.webdriver.common.keys import Keys import time # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) # 定位到设置,输入内容并搜索 search_boxdriver.find_element_by_id(kw) search_box.send_keys(python) search_box.send_keys(Keys.ENTER) time.sleep(3) # 获取网页标题 print(driver.title)3根据URL判断# -*- coding: utf-8 -*- from selenium import webdriver # 导入Keys类调用键盘 from selenium.webdriver.common.keys import Keys import time # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) # 定位到设置,输入内容并搜索 search_boxdriver.find_element_by_id(kw) search_box.send_keys(python) search_box.send_keys(Keys.ENTER) time.sleep(3) # 获取当前网页URL print(driver.current_url)四、设置元素等待# -*- coding: utf-8 -*- from selenium import webdriver # 显示等待时元素定位方式需要使用By加载 from selenium.webdriver.common.by import By # 设置显示等待 from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) # 定位到设置,输入内容并搜索 search_boxdriver.find_element_by_id(kw) # WebDriverWait(浏览器driver,最大超时时间,轮询时间) # EC.presence_of_element_located()里面接受的是元素定位方式和具体的表达式要使用元组的形式传入 # 定位搜索框 search_objWebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,kw))) # 输入内容 search_obj.send_keys(hello) # 设置提交 # search_obj.submit() search_obj.send_keys(Keys.ENTER)五、多窗口切换浏览器打开的窗口有一个叫句柄的概念句柄类似于每一个标签页的id一样是唯一的。# -*- coding: utf-8 -*- from selenium import webdriver # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 from selenium.webdriver.common.keys import Keys driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://www.baidu.com/) # 定位到设置,输入内容并搜索 search_boxdriver.find_element_by_id(kw) search_box.send_keys(李克强) search_box.send_keys(Keys.ENTER) # 获取标签页句柄 windowhandledriver.current_window_handle # print(windowhandle) # 点击 李克强百度百科 driver.find_element_by_xpath(//div[id1]/div/h3/a).click() # 获取当前浏览器的所有窗口的句柄获取回来的拆改纽扣句柄放在一个列表里 headlesdriver.window_handles print(headles) # 根据句柄进行切换 方法一 for head in headles: # 如果窗口句柄不等于打开的第一个窗口的句柄则就是第二个 if head!windowhandle: driver.switch_to.window(head) 方法二 # 根据下标进行句柄切换获取回来的时候窗口的句柄是一个列表-1代表是最新打开的窗口句柄0代表第一个 driver.switch_to.window(headles[-1]) # 点击 播报 按钮 driver.find_element_by_xpath(//div[classlemmaTitleBox_EbvJX]/div/span/span/span).click()六、表单切换在Web应用中经常会遇到frame/iframe表单嵌套页面的应用WebDriver只能在一个页面上对元素识别与定位对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。switch_to.frame()默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性则可以通过下面的方式进行定位除此之外在进入多级表单的情况下还可以通过switch_to.default_content()跳回最外层的页面。# -*- coding: utf-8 -*- import time from selenium import webdriver # 打开一个浏览器 # 法一、添加环境变量重启电脑 # 法二、填写浏览器驱动的绝对路径 from selenium.webdriver.common.keys import Keys driver webdriver.Edge(rD:\tools\driver\msedgedriver.exe) # 设置浏览器最大化显示 driver.maximize_window() # 隐式等待 driver.implicitly_wait(10) # 打开网页 driver.get(https://mail.163.com/) # iframe表单切换 switch_to.frame()里面可以填写iframe表单的id和name,但是id和name要唯一 还可以通过其他的定位方式定位到该iframe标签然后将定位到iframe标签对象传入到switch # 通过XPath的方式定位iframe标签 iframe_elementdriver.find_element_by_xpath(//div[idloginDiv]/iframe) driver.switch_to.frame(iframe_element) # 定位邮箱输入框 driver.find_element_by_css_selector(input[nameemail]).send_keys(xiangzc) # 定位密码框 driver.find_element_by_css_selector(input[namepassword]).send_keys(xiangzc) # 点击 登录 按钮 driver.find_element_by_id(dologin).click() time.sleep(2) # 点击VIP,按照此方式进入失败因为进行完上述操作后是在子页面中而VIP还在外层页面所以需要切换出来 driver.switch_to.default_content() driver.find_element_by_css_selector(a[hrefhttps://vipmail.163.com/?fromfmail]).click()
返回列表