Selenium API(二)
1.定位一组元素
WebDriver提供了8种定位一组元素的方法。
driver.find_elements_by_css_selector()
driver.find_elements_by_tag_name()
driver.find_elements_by_class_name()
driver.find_elements_by_xpath()
driver.find_elements_by_id()
driver.find_elements_by_link_text()
driver.find_elements_by_name()
driver.find_elements_by_partial_link_text()
# -*- coding:utf- -*-
from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = "file:///" + os.path.abspath('testcheck.html')
driver.get(file_path)
inputs = driver.find_elements_by_tag_name("input")
for input in inputs:
if input.get_attribute("type") == "checkbox":
input.click()
time.sleep()
driver.quit()
2.多表单切换
WebDriver只能在一个页面上对元素进行识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位,因此WebDriver提供了方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。
switch_to.frame(),默认可以直接取表单的id或者name属性,如果iframe没有可用的id和name属性,可以通过下面的方式定位:
...
# 先通过css定位到iframe
iframe = driver.find_element_by_css_selector("[class='iframe']")
# 再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(iframe)
...
driver.switch_to.parent_frame()
说明:当完成了当前iframe操作后,可以通过driver.switch_to.parent_frame()跳出当前一级表单,该方法默认对应于离他最近的switch_to.frame()方法,此外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳会到最外层的页面。
3.多页面切换
WebDriver提供了switch_to.window()方法实现在不同的窗口之间切换。
# -*- coding:utf- -*-
from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
driver.implicitly_wait()
driver.get("http://www.baidu.com")
# 获得百度搜索窗口句柄
search_handle = driver.current_window_handle driver.find_element_by_link_text("登录").click()
driver.find_element_by_link_text("立即注册").click()
time.sleep()
# 获取当前所有打开的窗口的句柄
all_handles = driver.window_handles
for handle in all_handles:
if handle != search_handle:
# 如果句柄不为搜索窗口的句柄,则切换到注册页面
driver.switch_to.window(handle)
print("now register window!")
time.sleep() for handle in all_handles:
if handle == search_handle:
driver.switch_to.window(handle)
driver.find_element_by_id("TANGRAM__PSP_4__closeBtn").click()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep() driver.quit()
4.警告框处理
在WebDriver中通过使用switch_to_alert()方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。
text:返回alert/confirm/prompt中的文字信息。
accept():接受现有警告框。
dismiss():解散现有警告框。
send_keys(keysToSend):发送文本到警告框。keysToSend:将文本发送至警告框。
5.send_keys()实现文件上传
# 定位上传按钮,然后添加本地文件
driver.find_element_by_name("file").send_keys("f:\\upload_file.txt")
如果想要实现文件上传,只需要找到上传的input标签,基本伤可以同send_keys()方法将文件上传。
6.文件下载
# -*- coding:utf- -*-
from selenium import webdriver
import os
import time
firefox_profile = webdriver.FirefoxProfile()
# 设置为0代表下载到浏览器默认下载路径,设置为2则表示可以保存到执行目录中
firefox_profile.set_preference("browser.download.folderList", )
# 是否显示开始,True为显示,False为不显示
firefox_profile.set_preference("browser.download.manager.showWhenStarting", False)
# 执行下载的目录,os.getcwd()返回当前目录
firefox_profile.set_preference("browser.download.dir", os.getcwd())
# 设置下载文件的类型
firefox_profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream") driver = webdriver.Firefox(firefox_profile=firefox_profile)
driver.get("xxx")
driver.find_element_by_name("xxx").click()
driver.quit()
7.操作Cookie
WebDriver提供了操作Cookie的方法,可以读取,添加和删除cookie信息:
- get_cookies():获得所有cookie信息。
- get_cookie():返回字典的key为“name”的cookie信息。
- add_cookie(cookie_dict):添加cookie。cookie_dict为字典对象,必须有name和value。
- delete_cookie():删除cookie信息,需要指定name,即要删除的cookie的名称。
- delete_all_cookies():删除所有的cookie信息。
8.执行JavaScript
WebDriver提供了execute_script()方法来执行JavaScript代码。
# -*- coding:utf- -*-
from selenium import webdriver
import os
import time driver = webdriver.Firefox()
# 设置浏览器窗口大小
driver.set_window_size(, )
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep()
js = "window.scrollTo(100, 400)"
# 执行js脚本,设置窗口到滚动条的位置
driver.execute_script(js)
time.sleep()
driver.quit()
9.窗口截图
WebDriver提供了get_screenshot_as_file()来截取当前窗口。
# -*- coding:utf- -*-
from selenium import webdriver
import os
import time driver = webdriver.Firefox() driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep()
# 截取当前窗口,并制定截图保存的位置
driver.get_screenshot_as_file("d:\\test.jpg")
driver.quit()
10.关闭浏览器窗口
WebDriver提供了quit()方法,其含义为退出相关的驱动程序和关闭所有窗口,另外提供了close()方法,用来关闭某一个窗口。
最新文章
- Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET)
- mysql ERROR 1062: ALTER TABLE causes auto_increment resequen
- php优点
- Command模式
- Freemyapps赚取积分终极图文教程
- E. Tetrahedron(数学推导)
- Android将ScrollView移动到最底部
- rqnoj-217-拦截导弹-最长不上升子序列以及不上升子序列的个数
- careercup-数学与概率 7.7
- Ubuntu等Linux系统清除DNS缓存的方法
- 使用Sphinx生成静态网页
- 一天一个类--NIO 之Buffer
- QVector&;lt;QString&;gt; 显示器里面的动态数组元素QString和char *转变
- 【NOIP2012】DAY1+DAY2题解
- Javascript 闭包访问问题?
- [2019.03.16]使用DOM操作函数和CSS选择器来针对已有的HTML进行只凭JS的改动
- Elasticsearch-基础介绍及索引原理分析(转载)
- __x__(37)0909第五天__背景图按钮
- Luogu P2613 【模板】有理数取余
- Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.