webdriver+webelement模块
webdriver模块
在做UI自动化测试时,我们必须对浏览器进行操作。因此需要先创建的webdriver对象。
from selenium import webdriver
# 创建webdriver对象
driver = webdriver.Chrome()
webdriver对象的属性和方法的使用(常用顺序从上到下)
| 使用 | 说明 | 备注 |
|---|---|---|
| driver.get('https://www.baidu.com') | 在当前浏览器会话中加载固定url的web页面 | |
| driver.find_element_by_xpath("//*[@id="kw"]") | 通过xpath表达式定位 | |
| driver.find_element_by_css_selector("#kw") | 通过css选择器进行定位 | |
| js = "document.getElementById('su').value='百度两下'" driver.execute_script(js) | 在浏览器中同步执行JavaScript | |
| driver.close() | 关闭当前窗口(标签页) | |
| driver.quit() | 关闭浏览器,包括所有页面 | |
| driver.back() | 浏览器后退 | |
| driver.forward() | 浏览器前进 | |
| driver.refresh() | 浏览器刷新 | |
| driver.implicitly_wait(30) | 隐式等待,是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步 | 隐性等待对整个driver的周期都起作用,所以只要设置一次即可 |
| driver.save_screenshot(f"{int(time.time())}.png") | save_screenshot 调用的还是 get_screenshot_as_file方法 | |
| driver.get_window_rect() | 获取当前窗口的x、y坐标以及的高度和宽度, return {'height': 1020, 'width': 945, 'x': 10, 'y': 10} | |
| driver.current_url | 获取当前页面的URL | |
| driver.title | 返回当前页的标题title | |
| driver.name | 返回此实例的底层浏览器的名称 | |
| driver.capabilities | 获取浏览器的属性值 | |
| driver.find_element_by_id("kw") | 通过元素id定位 | |
| driver.find_element_by_name("wd") | 通过元素name定位 | |
| driver.find_element_by_class_name("s_ipt") | 通过类名进行定位 | |
| driver.find_element_by_link_text("新闻") | 通过完整超链接定位 | |
| driver.find_element_by_partial_link_text("hao").click() | 通过部分链接定位 | |
| driver.find_element_by_tag_name("input") | 通过标签定位 | |
| driver.execute_async_script(js) | 在浏览器中异步执行JavaScript,当前在使用过程中还未涉及到异步概念,延后处理 | |
| driver.page_source | 获取当前页面源码,通常配合爬虫使用 | |
| driver.current_window_handle | 返回当前窗口的句柄 | |
| driver.window_handles | 返回当前会话中所有窗口的句柄;打开多个页面时使用该方法,返回全部句柄 | |
| driver.maximize_window() | 最大化webdriver正在使用的当前窗口 | |
| driver.fullscreen_window() | 调用特定于窗口管理器的“全屏”操作,相当于F11全屏浏览器 | |
| driver.minimize_window() | 调用特定于窗口管理器的“最小化”操作,将浏览器最小化到任务栏 | |
| driver.switch_to | 返回一个对象,其中包含可将焦点切换到的所有选项 | |
| driver.switch_to.active_element | 定位到当前聚焦的元素上,返回了一个元素 | |
| driver.switch_to.alert | 切换到alert弹窗 | |
| driver.switch_to.default_content() | 切换到主页面;当切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档 | |
| driver.switch_to.frame('frame_name') driver.switch_to.frame(1) driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0]) | 通过id、name、element(定位的某个元素)、索引来切换到某个frame | |
| driver.switch_to.parent_frame() | 是switch_to中独有方法,可以切换到上一层的frame,对于层层嵌套的frame很有用 | |
| driver.switch_to.new_window() driver.get("http://www.4399.com") | 打开一个新页面,使浏览器中存在多个标签页 | |
| driver.switch_to.window(handle) | 切换到指定的window_name页签,要切换到的窗口句柄 | |
| driver.get_cookies() | 返回当前浏览器中的cookies(所有的) | |
| driver.get_cookie(name) | 返回当前浏览器中的cookie(指定name的) | |
| driver.delete_cookie(name) | 删除具有给定名称的单个cookie | |
| driver.delete_all_cookies() | 删除会话范围内的所有cookie | |
| driver.add_cookie(cookie_dict="") | 在当前会话中添加一个cookie | |
| driver.set_page_load_timeout(30) | 设置页面加载超时 | |
| driver.set_script_timeout(30) | 设置页面异步js执行超时 | |
| driver.find_element(By.ID, 'foo') | 根据策略和定位器找到给定的(唯一)元素By.ID/By.TAG_NAME/By.NAME... | |
| driver.find_elements(By.ID, 'foo') | 返回列表,包含多个元素对象 | |
| driver.desired_capabilities | 返回当前正在使用的驱动程序所需的功能属性值 | |
| driver.get_screenshot_as_file(f"{int(time.time())}.png") | 保存当前窗口的截图到一个PNG图像文件,filename应以.png结尾 | |
| driver.get_screenshot_as_png() | 以二进制数据的形式获取当前窗口的屏幕截图。\x89PNG\r\n\x1a\n\x00 | |
| driver.get_screenshot_as_base64() | 以base64编码的字符串的形式获取当前窗口的屏幕截图,方便在HTML中的嵌入图像使用 | |
| driver.set_window_size(800, 600) | 设置浏览器窗体大小,宽度*高度 | |
| driver.get_window_size() | 获取当前窗口的宽度和高度, return {'width': 945, 'height': 1020} | |
| driver.set_window_position(500, 500) | 设置当前窗口的x,y位置 | |
| driver.get_window_position() | 获取当前窗口的x、y位置, return {'x': 10, 'y': 10} | |
| driver.set_window_rect(x=500,y=500,width=800,height=600) | 设置当前窗口的x、y坐标以及的高度和宽度 |
代码如下,若上面能满足您的要求,则直接跳过。
from selenium import webdriver
# 创建webdriver对象
driver = webdriver.Chrome()
# 在当前浏览器会话中加载固定url的web页面,
driver.get('https://www.baidu.com')
# 返回当前页的标题title
title = driver.title
# 返回此实例的底层浏览器的名称
name = driver.name
# print(name)
# 获取webdriver模块中方法值
# print(dir(driver))
# 获取浏览器的属性值
# print(driver.capabilities)
# """
# 在当前页面中寻找元素(唯一元素)
# driver.find_element_by_id("kw")
# driver.find_element_by_name("wd")
# driver.find_element_by_class_name("s_ipt")
# driver.find_element_by_xpath("//*[@id="kw"]")
# driver.find_element_by_css_selector("#kw")
# driver.find_element_by_link_text("新闻")
# driver.find_element_by_partial_link_text("hao").click()
# driver.find_element_by_tag_name("input")
# 以上查找元素方法中用的最多是xpath & css_selector,个人喜好使用css_selector.
# 在浏览器中同步执行JavaScript
# 将百度页面中‘百度一下’按钮文字更改为‘百度两下’
js = "document.getElementById('su').value='百度两下'"
driver.execute_script(js)
# 在浏览器中异步执行JavaScript,当前在使用过程中还未涉及到异步概念,延后处理
# driver.execute_async_script(js)
# 获取当前页面的URL
print(driver.current_url)
# 获取当前页面源码,通常配合爬虫使用。
# print(driver.page_source)
# 关闭当前窗口(标签页)
# driver.close()
# 退出驱动程序并关闭所有相关窗口(关闭浏览器,包括所有页面)
# driver.quit()
# 返回当前窗口的句柄
# handle = driver.current_window_handle
# 返回当前会话中所有窗口的句柄;打开多个页面时使用该方法,返回全部句柄
# print(driver.window_handles)
# 最大化webdriver正在使用的当前窗口
# driver.maximize_window()
# 调用特定于窗口管理器的“全屏”操作,相当于F11全屏浏览器
# driver.fullscreen_window()
time.sleep(2)
# 调用特定于窗口管理器的“最小化”操作,将浏览器最小化到任务栏
# driver.minimize_window()
# driver.switch_to 返回一个对象,其中包含可将焦点切换到的所有选项:
"""
#.active_element 定位到当前聚焦的元素上,返回了一个元素
element = driver.switch_to.active_element
#.alert 切换到alert弹窗
alert = driver.switch_to.alert
# .default_content() 切换到主页面;当切到frame中之后,不能继续操作主文档的元素,若想操作主文档内容,则需切回主文档
driver.switch_to.default_content()
# 通过id、name、element(定位的某个元素)、索引来切换到某个frame
driver.switch_to.frame('frame_name')
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
# .parent_frame() 是switch_to中独有方法,可以切换到上一层的frame,对于层层嵌套的frame很有用
driver.switch_to.parent_frame()
# .new_window() 打开一个新页面,使浏览器中存在多个标签页
driver.switch_to.new_window()
driver.get("http://www.4399.com")
# .window() 切换到指定的window_name页签,要切换到的窗口句柄
driver.switch_to.window(handle)
"""
# 浏览器后退
# driver.back()
# 浏览器前进
# driver.forward()
# 浏览器刷新
# driver.refresh()
# 返回当前浏览器中的cookies(所有的)
# driver.get_cookies()
# 返回当前浏览器中的cookie(指定name的)
# driver.get_cookie(name)
# 删除具有给定名称的单个cookie
# driver.delete_cookie(name)
# 删除会话范围内的所有cookie
# driver.delete_all_cookies()
# 在当前会话中添加一个cookie
# driver.add_cookie(cookie_dict="")
# 隐式等待,是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步
# 隐性等待对整个driver的周期都起作用,所以只要设置一次即可
# driver.implicitly_wait(30)
# 设置页面加载超时
# driver.set_page_load_timeout(30)
# 设置页面异步js执行超时
# driver.set_script_timeout(30)
# 根据策略和定位器找到给定的(唯一)元素By.ID/By.TAG_NAME/By.NAME...
# driver.find_element(By.ID, 'foo')
# 返回列表,包含多个元素对象
# driver.find_elements(By.ID, 'foo')
# 返回当前正在使用的驱动程序所需的功能属性值
# temp = driver.desired_capabilities
# 保存当前窗口的截图到一个PNG图像文件,filename应以.png结尾;save_screenshot 调用的还是 get_screenshot_as_file方法
# driver.get_screenshot_as_file(f"{int(time.time())}.png")
# driver.save_screenshot(f"{int(time.time())}.png")
# 以二进制数据的形式获取当前窗口的屏幕截图。\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x0...
# temp = driver.get_screenshot_as_png()
# 以base64编码的字符串的形式获取当前窗口的屏幕截图,方便在HTML中的嵌入图像使用;iVBORw0KGgoAAAANSUhEUgAAB4AAAAOdCAYAAABkpX+Q...
# temp = driver.get_screenshot_as_base64()
# 设置浏览器窗体大小,宽度*高度,窗口句柄名称
# driver.set_window_size(800, 600)
# 获取当前窗口的宽度和高度, return {'width': 945, 'height': 1020}
# temp = driver.get_window_size()
# 设置当前窗口的x,y位置
# driver.set_window_position(500, 500)
# 获取当前窗口的x、y位置, return {'x': 10, 'y': 10}
# temp = driver.get_window_position()
# 获取当前窗口的x、y坐标以及的高度和宽度, return {'height': 1020, 'width': 945, 'x': 10, 'y': 10}
# temp = driver.get_window_rect()
# 设置当前窗口的x、y坐标以及的高度和宽度
# driver.set_window_rect(x=500,y=500,width=800,height=600)
webElement模块
webdriver对象相当于浏览器。在自动化测试中除了浏览器操作外,我们还需实现UI元素的操作。而操作元素前必须先定位到元素(webelement)才能进行操作。
selenium元素定位的方法有八种:
| 定位一个元素 | 定位多个元素 | 含义 |
|---|---|---|
| find_element_by_id | find_elements_by_id | 通过元素id定位 |
| find_element_by_name | find_elements_by_name | 通过元素name定位 |
| find_element_by_xpath | find_elements_by_xpath | 通过xpath表达式定位 |
| find_element_by_link_text | find_elements_by_link_tex | 通过完整超链接定位 |
| find_element_by_partial_link_text | find_elements_by_partial_link_text | 通过部分链接定位 |
| find_element_by_tag_name | find_elements_by_tag_name | 通过标签定位 |
| find_element_by_class_name | find_elements_by_class_name | 通过类名进行定位 |
| find_elements_by_css_selector | find_elements_by_css_selector | 通过css选择器进行定位 |
# 在当前页面中寻找元素(唯一元素),elements是定位元素集(非唯一元素)
driver.find_element_by_id("kw")
driver.find_element_by_name("wd")
driver.find_element_by_class_name("s_ipt")
driver.find_element_by_xpath("//*[@id="kw"]")
driver.find_element_by_css_selector("#kw")
driver.find_element_by_link_text("新闻")
driver.find_element_by_partial_link_text("hao")
driver.find_element_by_tag_name("input")
# 以上查找元素方法中用的最多是xpath & css_selector,个人喜好使用css_selector.
使用css_selector的方法说明:
通过css定位,id使用#,class使用.,级别向下使用>,:nth-child(1)。
driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector("[title='搜索']")
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("html > body > form > span > input")
driver.find_element_by_css_selector("span.soutu-btn > input#kw")
driver.find_element_by_css_selector("p:nth-child(1)")
| 选择器 | 示例 | 示例说明 |
|---|---|---|
| .intro | 选择所有class="intro"的元素 | |
| #firstname | 选择所有id="firstname"的元素 | |
| * | 选择所有元素 | |
| p | 选择所有<p>元素 | |
| div,p | 选择所有<div>元素和<p>元素 | |
| div p | 选择<div>元素内的所有<p>元素 | |
| div>p | 选择所有父级是 <div> 元素的 <p> 元素 | |
| div+p | 选择所有紧接着<div>元素之后的<p>元素 | |
| [ | [target] | 选择所有带有target属性元素 |
| [ | [target=-blank] | 选择所有使用target="-blank"的元素 |
| [ | [title~=flower] | 选择标题属性包含单词"flower"的所有元素 |
| [ | [lang|=en] | 选择一个lang属性的起始值="EN"的所有元素 |
| a:link | 选择所有未访问链接 | |
| a:visited | 选择所有访问过的链接 | |
| a:active | 选择活动链接 | |
| a:hover | 选择鼠标在链接上面时 | |
| input:focus | 选择具有焦点的输入元素 | |
| p:first-letter | 选择每一个<P>元素的第一个字母 | |
| p:first-line | 选择每一个<P>元素的第一行 | |
| p:first-child | 指定只有当<p>元素是其父级的第一个子级的样式。 | |
| p:before | 在每个<p>元素之前插入内容 | |
| p:after | 在每个<p>元素之后插入内容 | |
| p:lang(it) | 选择一个lang属性的起始值="it"的所有<p>元素 | |
| p~ul | 选择p元素之后的每一个ul元素 | |
| [ | a[src^="https"] | 选择每一个src属性的值以"https"开头的元素 |
| [ | a[src$=".pdf"] | 选择每一个src属性的值以".pdf"结尾的元素 |
| [ | a[src*="runoob"] | 选择每一个src属性的值包含子字符串"runoob"的元素 |
| p:first-of-type | 选择每个p元素是其父级的第一个p元素 | |
| p:last-of-type | 选择每个p元素是其父级的最后一个p元素 | |
| p:only-of-type | 选择每个p元素是其父级的唯一p元素 | |
| p:only-child | 选择每个p元素是其父级的唯一子元素 | |
| p:nth-child(2) | 选择每个p元素是其父级的第二个子元素 | |
| p:nth-last-child(2) | 选择每个p元素的是其父级的第二个子元素,从最后一个子项计数 | |
| p:nth-of-type(2) | 选择每个p元素是其父级的第二个p元素 | |
| p:nth-last-of-type(2) | 选择每个p元素的是其父级的第二个p元素,从最后一个子项计数 | |
| p:last-child | 选择每个p元素是其父级的最后一个子级。 | |
| :root | 选择文档的根元素 | |
| p:empty | 选择每个没有任何子级的p元素(包括文本节点) | |
| #news:target | 选择当前活动的#news元素(包含该锚名称的点击的URL) | |
| input:enabled | 选择每一个已启用的输入元素 | |
| input:disabled | 选择每一个禁用的输入元素 | |
| input:checked | 选择每个选中的输入元素 | |
| :not(p) | 选择每个并非p元素的元素 | |
| ::selection | 匹配元素中被用户选中或处于高亮状态的部分 | |
| :out-of-range | 匹配值在指定区间之外的input元素 | |
| :in-range | 匹配值在指定区间之内的input元素 | |
| :read-write | 用于匹配可读及可写的元素 | |
| :read-only | 用于匹配设置 "readonly"(只读) 属性的元素 | |
| :optional | 用于匹配可选的输入元素 | |
| :required | 用于匹配设置了 "required" 属性的元素 | |
| :valid | 用于匹配输入值为合法的元素 | |
| :invalid | 用于匹配输入值为非法的元素 |
使用xpath方法说明
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
driver.find_element_by_xpath("/html/body/form/span/input")
driver.find_element_by_xpath("//span[@class='soutu-btn']/input")
driver.find_element_by_xpath("//form[@id='form']/span/input")
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']")
选取节点
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:
| 表达式 | 描述 |
|---|---|
| nodename | 选取此节点的所有子节点。 |
| / | 从根节点选取。 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
| . | 选取当前节点。 |
| .. | 选取当前节点的父节点。 |
| @ | 选取属性。 |
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| bookstore | 选取 bookstore 元素的所有子节点。 |
| /bookstore | 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! |
| bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
| //book | 选取所有 book 子元素,而不管它们在文档中的位置。 |
| bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
| //@lang | 选取名为 lang 的所有属性。 |
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
| /bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
| /bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
| /bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
| //title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
| //title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
| /bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 |
| /bookstore/book[price>35.00]//title | 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。 |
选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
| 通配符 | 描述 |
|---|---|
| * | 匹配任何元素节点。 |
| @* | 匹配任何属性节点。 |
| node() | 匹配任何类型的节点。 |
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| /bookstore/* | 选取 bookstore 元素的所有子元素。 |
| //* | 选取文档中的所有元素。 |
| //title[@*] | 选取所有带有属性的 title 元素。 |
选取若干路径
通过在路径表达式中使用"|"运算符,您可以选取若干个路径。
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| //book/title | //book/price | 选取 book 元素的所有 title 和 price 元素。 |
| //title | //price | 选取文档中的所有 title 和 price 元素。 |
| /bookstore/book/title | //price | 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。 |
元素定位后的操作
元素定位后,接下来就是元素的操作了,即webelement对象的属性和方法的使用:
ele = driver.find_element_by_id('id')
| 使用 | 说明 | 备注 |
|---|---|---|
| ele.tag_name | 获取该元素的'tagName'属性,input/div | |
| ele.text | 获取标签内文字 | 隐藏标签中文字,无法获取;只能获取在页面中显示的元素,标签内的文字内容 |
| ele.send_keys("输入文字") | 在文本框内输入文字 | |
| ele.click() | 点击操作 | 1.<input type="button" /> 这就是一个按钮。如果你不写javascript 的话,按下去什么也不会发生。 2.<input type="submit" /> 这样的按钮用户点击之后会自动提交 form,除非你写了javascript 阻止它。 3.<button> 这个按钮放在 form中也会点击自动提交,比前两个的优点是按钮的内容不光可以有文字,还可以有图片等多媒体内容。(当然,前两个用图片背景也可以做到)。它的缺点是不同的浏览器得到的value值不同;可能还有其他的浏览器兼容问题(葛亮)。其他标签,例如 a, img, span, div,然后用图片把它伪装成一个按钮。 |
| ele.submit() | 提交操作 | |
| ele.clear() | 如果是文本输入元素(文本框内容),则清除文本 | |
| ele.get_property('value') | 获取元素的给定属性,标签内的属性 | 获取元素的给定属性,标签内的属性,二者的区别在于属性不存在时,是否报错 |
| ele.get_property('value1') | 属性值不存在就报错 | |
| ele.get_attribute('value') | 获取元素的给定属性,标签内的属性 | |
| ele.get_attribute('value1') | 属性值不存在返回 None | |
| ele.is_selected() | 当前元素是否被选中,通常在checkbox、radiobox、select option等元素上 | |
| ele.is_enabled() | 用于存储input、select等元素的可编辑状态,可以编辑返回true,否则返回false | |
| ele.is_displayed() | 元素对用户是否存在,这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素 | |
| ele.location_once_scrolled_into_view | 返回当前元素的左上角坐标X、Y的位置,即在当前页面中的绝对位置坐标 | |
| ele.size | 元素的大小属性,{'height': 44, 'width': 108} | |
| driver.find_element_by_css_selector('#J_searchbg') | 元素的CSS属性的值,在F12中‘Styles’标签下 | temp = ele.value_of_css_property('height') temp1 = ele.value_of_css_property('width') temp2 = ele.value_of_css_property('font-family') print(temp, temp1, temp2, sep='\n') |
| ele.location | 页面元素在canvas中的位置,从body左上角开始计算{'x': 678, 'y': 58} | |
| ele.rect | 返回包含元素大小和位置的字典,{'height': 32, 'width': 430, 'x': 678.5, 'y': 58} | |
| ele.screenshot_as_base64 | 对元素进行截图,存储为:base64编码的字符串,二进制png流,png图片 | |
| ele.screenshot_as_png | ||
| ele.screenshot(str(time.time()) + '.png') | ||
| temp = ele.parent temp.get('https://www.baidu.com') | 找到此元素的WebDriver实例的内部引用(相当于返回了定义的driver对象,可调用webdriver的属性和方法) | |
| ele.id | * selenium使用的内部ID,表示当前元素在selenium中的唯一标识。 |
代码如下,若上面能满足您的要求,则直接跳过。
# 获取该元素的'tagName'属性,即标签名
# temp = driver.find_element_by_id("su").tag_name
# 获取标签内文字。隐藏标签中文字,无法获取;只能获取在页面中显示的元素,标签内的文字内容
# temp = driver.find_element_by_css_selector('.soutu-hover-tip').text
# temp = driver.find_element_by_link_text('高考加油').text
# driver.find_element_by_id('kw').send_keys("submit与button的区别")
# ele = driver.find_element_by_id('su')
# 点击操作
# ele.click()
# 提交操作
# ele.submit()
# 二者区别
r'''
<input type="button" /> 这就是一个按钮。如果你不写javascript 的话,按下去什么也不会发生。
<input type="submit" /> 这样的按钮用户点击之后会自动提交 form,除非你写了javascript 阻止它。
<button> 这个按钮放在 form 中也会点击自动提交,比前两个的优点是按钮的内容不光可以有文字,还可以有图片等多媒体内容。
(当然,前两个用图片背景也可以做到)。它的缺点是不同的浏览器得到的 value 值不同;可能还有其他的浏览器兼容问题(葛亮)。
其他标签,例如 a, img, span, div,然后用图片把它伪装成一个按钮。
'''
# 如果是文本输入元素(文本框内容),则清除文本
# ele.clear()
# 获取元素的给定属性,标签内的属性,二者的区别在于属性不存在时,是否报错。
# temp = ele.get_property('value') # 百度一下
# temp = ele.get_property('value1') # 属性值不存在就报错
# temp = ele.get_attribute('value') # 百度一下
# temp = ele.get_attribute('value1') # 属性值不存在返回 None
# 返回元素是否被选中。可用于检查复选框或单选按钮是否被选中
# is_selected # 判断某个元素是否被选中,返回 Bool
# is_enabled # 用于存储input、select等元素的可编辑状态,可以编辑返回true,否则返回false
# is_displayed # 元素对用户是否存在,这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素
# ele.is_selected()
# ele.is_enabled()
# ele.is_displayed()
# 元素的屏幕坐标(从页面body体中计算{x,y},未计算警告框+浏览器菜单栏的高度)
# temp = ele.location_once_scrolled_into_view
# print(temp)
# time.sleep(2)
# driver.fullscreen_window()
# temp = ele.location_once_scrolled_into_view
# 元素的大小属性,{'height': 44, 'width': 108}
# temp = ele.size
# 元素的CSS属性的值,在F12中‘Styles’标签下
ele = driver.find_element_by_css_selector('#J_searchbg')
# temp = ele.value_of_css_property('height')
# temp1 = ele.value_of_css_property('width')
# temp2 = ele.value_of_css_property('font-family')
# print(temp, temp1, temp2, sep='\n')
# 页面元素在canvas中的位置,从body左上角开始计算{'x': 678, 'y': 58}
# temp = ele.location
# 返回包含元素大小和位置的字典,{'height': 32, 'width': 430, 'x': 678.5, 'y': 58}
# temp = ele.rect
# 对元素进行截图,存储为:base64编码的字符串,二进制png流,png图片
# temp = ele.screenshot_as_base64
# temp1 = ele.screenshot_as_png
# temp2 = ele.screenshot(str(time.time()) + '.png')
# 找到此元素的WebDriver实例的内部引用(相当于返回了定义的driver对象,可调用webdriver的属性和方法)
# temp = ele.parent
# temp.get('https://www.baidu.com')
# * selenium使用的内部ID,没弄明白这个是什么
# temp = ele.id
# temp1 = temp.get_property('value')
# temp2 = temp.get_property('value1')
# temp3 = temp.get_attribute('value')
# temp4 = temp.get_attribute('value1')
# print(type(ele), type(temp), sep='\n')
# driver.close()
# 获取浏览器窗口的当前坐标位置driver.get_window_position()
# temp = driver.get_window_position()

浙公网安备 33010602011771号