Selenium WebDriver(Python)API
1、
通过示例介绍Selenium-WebDriver
一个简单的入门方法就是这个例子,
它在Google上搜索术语“Cheese”,
然后将结果页面的标题输出到控制台。
java csharp python
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
# 可自从2.4.0
from selenium.webdriver.support import expected_conditions as EC
# 可自从2.26.0
driver = webdriver.Firefox()
# 创建Firefox的驱动的一个新实例
driver.get("https://www.google.com")
# 去谷歌主页
print driver.title
# 页面Ajaxy所以标题原来是这样:
inputElement = driver.find_element_by_name("q")
# 找到元素的name属性是Q(谷歌搜索框)
inputElement.send_keys("cheese!")
# 键入搜索
inputElement.submit()
# 提交表单(尽管谷歌自动搜索现在没有提交)
try:
WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))
# 我们不得不等待页面刷新,最后一件事,似乎被更新的标题是
print driver.title
# 您应该看到"cheese! - Google Search"
finally:
driver.quit()
2、
抓取页面
您可能想要使用WebDriver做的第一件事是导航到一个页面。
正常的做法是调用“get”:
driver.get("https://www.google.com")
3、
查找UI元素(WebElements)
“Find”方法使用名为“By”的定位器或查询对象。
“By”策略列在下面。
By ID
如何找到如下所示的元素的示例:
<div id="coolestWidgetEvah">...</div>
element = driver.find_element_by_id("coolestWidgetEvah")
or
from selenium.webdriver.common.by import By
element = driver.find_element(by=By.ID, value="coolestWidgetEvah")
By Class Name
如何找到如下所示的元素的示例:
<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>
cheeses = driver.find_elements_by_class_name("cheese")
or
from selenium.webdriver.common.by import By
cheeses = driver.find_elements(By.CLASS_NAME, "cheese")
By Tag Name
如何找到如下所示的元素的示例:
<iframe src="..."></iframe>
frame = driver.find_element_by_tag_name("iframe")
or
from selenium.webdriver.common.by import By
frame = driver.find_element(By.TAG_NAME, "iframe")
By Name
如何找到如下所示的元素的示例:
<input name="cheese" type="text"/>
cheese = driver.find_element_by_name("cheese")
or
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.NAME, "cheese")
By Link Text
如何找到如下所示的元素的示例:
<a href="http://www.google.com/search?q=cheese">cheese</a>>
cheese = driver.find_element_by_link_text("cheese")
or
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.LINK_TEXT, "cheese")
By Partial Link Text
如何找到如下所示的元素的示例:
<a href="http://www.google.com/search?q=cheese">search for cheese</a>>
cheese = driver.find_element_by_partial_link_text("cheese")
or
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese")
By CSS
下面找到奶酪的例子:
<div id="food"><span class="dairy">milk</span><span class="dairy aged">cheese</span></div>
cheese = driver.find_element_by_css_selector("#food span.dairy.aged")
or
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged")
By XPath
这是一个小抽象,所以对于下面的一段HTML:
<input type="text" name="example" />
<INPUT type="text" name="other" />
inputs = driver.find_elements_by_xpath("//input")
or
from selenium.webdriver.common.by import By
inputs = driver.find_elements(By.XPATH, "//input")
Using JavaScript
jQuery加载的页面上的简单示例:
element = driver.execute_script("return $('.cheese')[0]")
为页面上的每个标签查找所有输入元素:
labels = driver.find_elements_by_tag_name("label")
inputs = driver.execute_script(
"var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +
"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels)
4、
获取文本值
element = driver.find_element_by_id("element_id")
element.text
5、
用户输入 - 填写表单
复选框:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_tag_name("select"))
select.deselect_all()
select.select_by_visible_text("Edam")
提交:
driver.find_element_by_id("submit").click()
或者
element.submit()
6、
在Windows和Frames之间移动
一些Web应用程序有许多框架或多个窗口。
WebDriver支持使用“switchTo”方法在命名窗口之间移动:
driver.switch_to.window("windowName")
或者,
您可以将“窗口句柄”传递给“switchTo().window()”方法。
知道这一点,
可以遍历每个打开的窗口,
如下所示:
for handle in driver.window_handles:
driver.switch_to.window(handle)
您也可以在帧之间切换(或者切换到iframe):
driver.switch_to.frame("frameName")
7、
弹出对话框
alert = driver.switch_to.alert
# 用法: alert.dismiss(), etc等
8、
导航:历史和位置
driver.get("http://www.example.com")
# Python没有driver.navigate
“导航”界面还提供了在浏览器历史记录中前后移动的功能:
driver.forward()
driver.back()
9、
Cookies
driver.get("http://www.example.com")
# 转到正确的域
driver.add_cookie({'name':'key', 'value':'value', 'path':'/'})
# 现在设置cookie。这是整个域的一个
# 这里的cookie名称是“键”,它的值是“值”。
# 可以传入的其他键是:
# 域 -> 字符串,
# 安全 -> 布尔值,
# 到期 -> 毫秒,因为它应该过期。
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie['name'], cookie['value'])
# 现在输出当前URL的所有可用cookie
可以用2种方法删除cookie
driver.delete_cookie("CookieName")
# By name
driver.delete_all_cookies()
# Or all of them
10、
更改用户代理
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "some UA string")
driver = webdriver.Firefox(profile)
11、
拖放
以下是使用Actions类执行拖放操作的示例。
from selenium.webdriver.common.action_chains import ActionChains
element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")
ActionChains(driver).drag_and_drop(element, target).perform()
12、
显式等待
明确的等待是您定义的代码,
以便在继续执行代码之前等待某种条件发生。
最糟糕的情况是Thread.sleep(),
它将条件设置为等待的确切时间段。
有一些便利的方法可以帮助您编写只会根据需要等待的代码。
WebDriverWait与ExpectedCondition结合是可以实现的一种方式。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
ff = webdriver.Firefox()
ff.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:
ff.quit()
这会在抛出TimeoutException之前等待10秒,
或者如果它发现该元素将在0-10秒内返回它。
WebDriverWait默认每500毫秒调用一次ExpectedCondition,
直到它成功返回。
ExpectedCondition函数类型的成功返回值是布尔值true或非空对象。
预期条件
自动化网页浏览器时经常遇到一些常见的情况。
下面列出的是使用这些条件的几个例子。
元素是可点击的 - 显示并启用。
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))
ExpectedConditions包含一组预定义的条件以与WebDriverWait一起使用。
13、
隐等待
隐含的等待是告诉WebDriver在尝试查找一个或多个元素(
如果它们不是立即可用的)时轮询DOM一段时间。
默认设置为0.
一旦设置,
就会为WebDriver对象实例的生命周期设置隐式等待。
from selenium import webdriver
ff = webdriver.Firefox()
ff.implicitly_wait(10)
# 秒
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")
Selenium WebDriver(Python)API的更多相关文章
- webdriver(python)学习笔记一
最近有python开发的项目,也正打算要学习自动化与python语言.因此想通过学习python版本的webdriver来一同学习. 学习过程中参考资料有乙醇的博客:https://github.co ...
- webdriver(python)学习笔记二
自己开始一个脚本开始学习: # coding = utf-8 from selenium import webdriver browser = webdriver.Firefox() browser. ...
- Selenium学习(Python)
#从Selenium中导入Webdriver类,该类中定义了selenium支持的浏览器 # webdriver.Firefox # webdriver.FirefoxProfile # webdri ...
- Appium(Python)API
1.创建新的会话desired_caps = desired_caps = { 'platformName': 'Android', 'platformVersion': '7.0', 'dev ...
- selenium用法 (python)
滑动到指定元素位置 browser.find_element_by_xpath("//font[text()='资产管理部经办人'][1]").location_once_scro ...
- JUnit 5和Selenium基础(三)
在这一部分教程中,将介绍JUnit 5的其他功能,这些功能将通过并行运行测试,配置测试顺序和创建参数化测试来帮助减少测试的执行时间.还将介绍如何利用Selenium Jupiter功能,例如通过系统属 ...
- MySQL通用批量写入工具(Python)
背景 平台目前的分析任务主要以Hive为主,分析后的结果存储在HDFS,用户通过REST API或者Rsync的方式获取分析结果,这样的方式带来以下几个问题: (1)任务执行结束时间未知,用户 ...
- Appium(Python)测试混血App
Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app兼具Native App良好用户交互体验的优势和Web App跨平台开发的优势 HybridApp ...
- PEP8 Python 编码规范整理(Python)
add by zhj: 这个是豆瓣网友整理的PEP8,算是PEP8的一个简易版本,因为原PEP8内容太多,所以建议先看这篇文章,然后再看PEP8中文翻译 原文:http://www.douban.co ...
随机推荐
- 备份&添加无线网络配置
netsh wlan export profile key=clear folder=c:\ #备份 (ls c:\*.xml).FullName|%{netsh wlan add profile f ...
- Linux下安装Qt5.6.1
我的环境:CentOS 6.7 64位. 1.下载Qt: Qt版本有很多,自己比较菜,希望安装的过程越简单越好,感觉比较新的版本会好安装一些,5.4版本还要更新 /usr/lib64/libstdc ...
- Ajax全局加载框(Loading效果)的配置
在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进 ...
- 学习笔记 - Manacher算法
Manacher算法 - 学习笔记 是从最近Codeforces的一场比赛了解到这个算法的~ 非常新奇,毕竟是第一次听说 \(O(n)\) 的回文串算法 我在 vjudge 上开了一个[练习],有兴趣 ...
- Mac连接Linux服务器
1.终端命令 a).打开Mac的命令终端 b).输入ssh -p 22 root@101.200.86.233 它会提示你输入密码,输入正确的密码之后,你就发现已经登陆成功了.(22: 端口号 roo ...
- 【mongodb用户和身份认证管理】
admin系统库用户管理 #移除 #查看 特定的数据库用户管理 #添加 #修改密码
- 【mongdb主从复制和同步】
主从同步: Master: Slave: 副本集: #在卷本中加任意主机 #登录从 #登录主 #同步日志 #仲裁: 向集群中添加主机成为仲裁 #查看集群里的成员角色参数:
- Java核心技术36讲----------Exception和Error有什么区别
1.异常知识点学习实例 代码如下: package fromnet; /** * 参考链接:https://blog.csdn.net/qq_18505715/article/details/7319 ...
- python教程(三)·函数与模块
函数,这和数学中的函数有点关联,但又不是完全等价 概念 不说的这么官方,我就已自己的理解来表达 ^_^ 在数学中,把一个或多个值(输入x)进行一定的计算或者映射,得到一个值(输出y),这个计算或者映射 ...
- Python3 urllib 与 Python2 urllib的变化
Infi-chu: http://www.cnblogs.com/Infi-chu/ Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用im ...