导图社区 Selenium框架
Selenium是一套Web网站的程序自动化操作解决方案(控制浏览器操作)通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面,还能从web界面获取信息。
编辑于2023-01-06 17:17:35 湖北省Selenium
Selenium 是一套 Web网站 的程序自动化操作 解决方案,(控制浏览器操作)
通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面
还能从web界面获取信息
python中安装selenium
python -m pip install selenium安装selenium
python -m pip show selenium查看版本号
安装chrome浏览器驱动
https://chromedriver.storage.googleapis.com/index.html
浏览器操作
定义一个webdriver对象(控制浏览器)
wd = webdriver.Chrome() 要将浏览器驱动添加到环境变量中
wd = webdriver.Chrome(service=Service(r'浏览器驱动地址'))
让浏览器打开指定网址
wd.get('www.baidu.com')
设置浏览器全屏
wd.maximize_window()
设置浏览器宽高
wd.set_window_size(480,800)
关闭当前标签页
wd.close()
关闭浏览器
wd.quit()
实例
获取当前页面的快照(截图)
wd.get_screenshot_as_file(r"F:\error.png") F:\error.png为 图片存放地址
根据时间戳获取截图
时间戳time.strftime("%Y-%M:%M:%S")
实例
控制浏览器前进后退
wd.back()回到上一个网址
wd.forward()跳转到下一个网址
搜索元素中的字符串Ctrl+f
等待
等待的作用
子主题
隐式等待
wd.implicitly_wait(30) 在这段代码后面的元素定位,都会等待元素30秒,如果元素30S内出现(如10S时被定位到),则直接进行下面的代码,不再等待。
特点:全局等待,作用与所有的定位代码语句
应用:
子主题
放到所有定位语句的上面
实例
显示等待
特点:针对单个元素的等待,只会作用于单个定位语句 可以设置等待的时间和查询的频率
语法
应用
操作步骤
1.导包WebDriverWait
2.对单个元素定位加上显示等待
子主题
实例
强制等待
time.sleep(2) 强制等待2s
显示等待隐式等待的区别
元素操作
获取元素(元素定位)
wd.find_element(By.ID, 'kw') 通过ID获取,获取id为kw的元素
wd.find_elements(By.CLASS_NAME, 'animal') 通过类名获取,获取类名为animal的元素
wd.find_elements(By.TAG_NAME, 'div') 通过标签名来获取
wd.find_element(By.NAME,'wd') 通过name属性来获取,获取name为wd的元素
通过链接文本获取元素
element = wd.find_element(By.LINK_TEXT,'图片')
element = wd.find_element(By.PARTIAL_LINK_TEXT,'筑牢疫情防控') (模糊定位(获取元素))
通过Xpath (路径)获取元素
绝对定位(从根目录HTML开始)/ wd.find_element(By.XPATH,'/html/body/div[1]/a')
相对定位// wd.find_element(By.XPATH,'//div[3]//a[2]')
通过属性定位
通过id属性选择 //*[@id="ed"]
通过class属性选择
//select[@class='choice'] 选择所有select元素中class为choice的元素
如果一个元素class 有多个 //p[@class="capital huge-city"] 不能只写一个属性 选择p元素class属性名为capital huge-city的元素
属性+层级
属性+逻辑的方式定位
子主题
通过部分属性值定位
以。。。开头的属性值来定位
id以k开头的元素
通过文本定位
全文本定位 //*[text()='文本信息']
部分文本定位 //*[contains(text(),'部分文本信息')]
实例
通过css选择器来定位
id选择器#
wd.find_element(By.CSS_SELECTOR,'#kw')
类选择器.
标签选择器
属性选择器 [属性1="属性值"][属性2="属性值"]
多属性匹配 [属性1="属性值"][属性2="属性值"] wd.find_element(By.CSS_SELECTOR,"[value='百度一下'][id='su']")
属性值模糊匹配--包含 [属性*='属性值'] wd.find_element(By.CSS_SELECTOR,"[value*='一下']").click()
属性值模糊匹配--开头 [属性^='属性值'] wd.find_element(By.CSS_SELECTOR,"[id^='k']")
属性值模糊匹配--尾部 [属性$='属性值'] wd.find_element(By.CSS_SELECTOR,"[class$='ipt']")
子代选择器 >
后代选择器
实例
了解
find_element返回的是一个WebElement类型的对象(操控 对应的界面元素。)
find_element()获取单个元素 find_elements()获取多个元素
实例
webElement对象方法
element.send_keys('通讯\n') 向元素中写入
element.click() 点击元素
element.clear()清除元素内容
element.size 获取浏览器宽高
element.text 获取元素文本
element.get_attribute('属性名') 获取元素的属性值
实例
frame切换
iframe 元素非常的特殊, 在html语法中,frame 元素 或者iframe元素的内部 会包含一个 被嵌入的 另一份html文档。
切入内嵌的frame
wd.switch_to.frame(frame_reference) frame_reference 可以是 frame 元素的属性 name 或者 ID 。
切回最外部的Html
wd.switch_to.default_content()
实例
鼠标事件
1.引入ActionChains包
ActionChains类用于生成用户的行为, 所有的行为都存储在 actionchains 对象。 通过 perform()执行存储的行为
ActionChains(浏览器实例).行为方法().perform()
右击 context_click()
双击 double_click()
悬停 move_to_element()
长按 click_and_hold()
拖动 drag_and_drop()
实例
键盘事件
1.导入keys包
多窗口处理
句柄:是系统分配给窗口唯一标识,跟身份证一样, 你用这个句柄(一个长整型long)就可以找到这个窗口。
获取句柄
获取当前句柄 浏览器对象(webdriver).current_window_handle
获取所有句柄 浏览器对象(webdriver).window_handles
wd.switch_to_window(句柄) 用于处理多窗口操作的方法
遍历句柄切换到指定窗口
实例
alter弹窗处理
当浏览器弹出警告信息(弹窗)时,对弹窗进行处理
对弹窗进行处理
对弹窗信息进行处理
实例
控制浏览器滚动条
浏览器的滚动并非页面上的元素,无法通过定位元素的方式进行操作 可以借助javascript来进行操作
操作步骤
编写滚动js脚本
js1="var q = document.documentElement.scrollTop=0" 将滚动条的高度设置为0
document.body.scrollHeight为滚动条的高度
执行js脚本,采用的方法driver.execute_script(js脚本)
实例