一、selenium不弹出浏览器,后台静默运行 from selenium.webdriver.chrome.options import Options #打开浏览器 chrome_options = Options() chrome_options.add_argument(‘–headless’) chrome_options.add_argument(‘–disable-gpu’) # 驱动路径 path = ‘F:/python_workspace/customs/chromedriver.exe’ # 创建浏览器对象 driver = webdriver.Chrome(executable_path=path, chrome_options=chrome_options) driver.get(‘https://www.baidu.com’) 注意:必须导入:from selenium.webdriver.chrome.options import Options 二、selenium打开标签页,并获取句柄 js = r’window.open("www.baidu.com");’ driver.execute_script(js) handles = driver.window_handles driver.switch_to_window(handles[n+1]) n = n + 1
一、获取文本值 ———————————————————————————人们通常希望检索元素中包含的innerText值。这将返回单个字符串值。请注意,这只会返回页面上显示的可见文本。 element = driver.find_element_by_id("element_id") element.text 二、用户输入 – 填写表单 ———————————————————————————我们已经看过如何在textarea或text字段中输入文本,但其他元素呢?您可以“切换”复选框的状态,也可以使用“单击”设置选择的OPTION标记。处理SELECT标签也不错: select = driver.find_element_by_tag_name("select") allOptions = select.find_elements_by_tag_name("option") for option in allOptions: print "Value is: " + option.get_attribute("value") option.click() 这将在页面上找到第一个“SELECT”元素,并依次遍历每个OPTION,打印出它们的值,然后依次选择每个OPTION。正如您将注意到的,这不是处理SELECT元素的最有效方法。WebDriver的支持类包括一个名为“Select”的支持类,它提供了与这些类交互的有用方法。 # available since 2.12 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") 这将从页面上的第一个SELECT中取消选择所有OPTION,然后选择带有显示文本“Edam”的OPTION。 填写完表单后,您可能想要提交表单。一种方法是找到“提交”按钮并单击它: driver.find_element_by_id("submit").click() 或者,WebDriver在每个元素上都有“提交”的便捷方法。如果在表单中的元素上调用它,WebDriver将向上走DOM,直到找到封闭的表单,然后调用submit。如果元素不在表单中,那么NoSuchElementException将抛出: element.submit() 三、多窗口、多标签 ———————————————————————————某些Web应用程序具有许多标签或多个窗口。WebDriver支持使用“switchTo”方法在多个窗口之间移动: driver.switch_to.window("windowName") 所有调用driver现在将被解释为定向到特定窗口。但你怎么知道窗口的名字?看一下打开它的javascript或链接: <a href="somewhere.html" target="windowName">Click here to open a new window</a> 或者,您可以将“窗口句柄”传递给“switchTo()。window()”方法。知道这一点,就可以迭代每个打开的窗口,如下所示: for handle in driver.window_handles: driver.switch_to.window(handle) 您还可以从一个标签切换到另一标签(或切换到iframe): driver.switch_to.frame("frameName") 三、弹出对话框 ———————————————————————————从Selenium 2.0 beta 1开始,内置支持处理弹出对话框。触发打开弹出窗口的操作后,您可以使用以下命令访问对话框: alert = driver.switch_to.alert # usage: alert.dismiss(), etc. 这将返回当前打开的对话框对象。使用此对象,您现在可以接受,关闭,读取其内容,甚至可以键入提示。此界面在警告,确认和提示方面同样有效。有关更多信息,请参阅JavaDocs 或RubyDocs。 四、导航:历史和位置 ———————————————————————————之前,我们介绍了使用“get”命令(driver.get(“http://www.example.com”)或driver.Url=”http://www.example.com”在C#中)导航到页面 。正如您所见,WebDriver具有许多较小的,以任务为中心的界面,导航是一项有用的任务。因为加载页面是一个基本要求,所以这样做的方法存在于主WebDriver接口上,但它只是一个同义词: driver.get("http://www.example.com") # python doesn’t have driver.navigate “导航”界面还提供了在浏览器历史记录中前后移动的功能: driver.forward() driver.back() 请注意,此功能完全取决于底层浏览器。如果您习惯于一个浏览器的行为而不是另一个浏览器,那么当您调用这些方法时,可能会发生意外情况。 四、Cookie ———————————————————————————cookie的使用 # Go to the …
通过示例介绍Selenium-WebDriver API ————————————————————————————————– WebDriver是一种用于自动化Web应用程序测试的工具,特别是用于验证它们是否按预期工作。它旨在提供一个易于探索和理解的友好API,比Selenium-RC(1.0)API更易于使用,这将有助于使您的测试更易于阅读和维护。它不依赖于任何特定的测试框架,因此它可以在单元测试项目中使用,也可以从普通的“主”方法中使用。本节介绍WebDriver的API,帮助您开始熟悉它。首先,如果您还没有设置WebDriver项目。这在上一节“ 设置Selenium-WebDriver项目”中有所描述。 设置项目后,您可以看到WebDriver的行为与任何普通库一样:它完全是自包含的,您通常不需要记住在使用它之前启动任何其他进程或运行任何安装程序,而不是使用Selenium-RC到代理服务器。 注意:使用ChromeDriver,Opera Driver,Android Driver 和iOS Driver需要执行其他步骤 你现在准备写一些代码了。一个简单的入门方法就是这个例子,它在Google上搜索术语“Cheese”(由于众所周知的原因,我们的列子是在百度上搜索“高效码农”),然后将结果页面的标题输出到控制台。 # -*- coding: utf-8 -*- 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起可用 # 创建Chrome驱动程序的新实例 driver = webdriver.Chrome() # 转到百度主页 driver.get("https://www.baidu.com") # 打印页面title print(driver.title) # 找到id属性为kw的元素(百度搜索框) inputElement = driver.find_element_by_id("kw") # 输入搜索内容 inputElement.send_keys("高效码农") # 提交表单 inputElement.submit() try: # 我们必须等待页面刷新,似乎更新的最后一件事是标题 WebDriverWait(driver, 10).until(EC.title_contains("高效码农")) # 你应该看到"高效码农 – 百度搜索" print(driver.title) finally: # 退出驱动关闭所有窗口 driver.quit() Selenium-WebDriver API命令和操作 1、获取页面 ————————————————————————————————–您可能想要使用WebDriver做的第一件事是导航到页面。执行此操作的常规方法是调用”get”: driver.get("http://www.google.com") 由于系统和浏览器的差异,WebDriver可能会也可能不会等待页面加载。在某些情况下,WebDriver可能会在页面完成甚至开始加载之前返回控件。为确保稳健性,您需要使用显式和隐式等待等待页面中存在的元素 。 2、定位UI元素(WebElements) ————————————————————————————————–WebDriver中的定位元素可以使用WebDriver实例本身或WebElement上完成。 每个语言绑定都公开“查找元素”和“查找元素列表”方法。 前者返回与查询匹配的WebElement对象,如果找不到这样的元素,则抛出异常。 后者返回WebElements列表,如果没有DOM元素与查询匹配,则可能为空。“Find”方法采用名为“By”的定位器或查询对象。 “By”策略列在下面: 2.1、By ID 这是定位元素的最有效和首选方式。UI开发人员常见的缺陷是在页面上具有非唯一ID或自动生成id,两者都应该避免。html元素上的类比自动生成的id更合适。 如何查找如下所示元素的示例: <div id="coolestWidgetEvah">…</div> Python举例: element = driver.find_element_by_id("coolestWidgetEvah") 或者 from …
webdriver 简介 ——————————————————————–Selenium 2.0的主要新功能是集成WebDriver API。除了解决Selenium-RC API中的一些限制之外,WebDriver还旨在提供更简单,更简洁的编程接口。Selenium-WebDriver的开发是为了更好地支持动态网页,页面元素可能会在不重新加载页面的情况下发生变化。WebDriver的目标是提供精心设计的面向对象的API,为现代高级Web应用程序测试问题提供改进的支持。 与Selenium-RC相比,WebDriver如何“驱动”浏览器? ——————————————————————–Selenium-WebDriver使用每个浏览器对自动化的本机支持直接调用浏览器。如何进行这些直接调用,以及它们支持的功能取决于您使用的浏览器。有关每个“浏览器驱动程序”的信息将在本章后面提供。 对于熟悉Selenium-RC的人来说,这与你习惯的完全不同。Selenium-RC以相同的方式为每个支持的浏览器工作。它在浏览器加载时将“javascript函数”注入浏览器,然后使用其javascript在浏览器中驱动AUT。WebDriver不使用此技术。同样,它使用浏览器内置的自动化支持直接驱动浏览器。 WebDriver和Selenium-Server ——————————————————————–您可能需要也可能不需要Selenium Server,具体取决于您打算如何使用Selenium-WebDriver。如果您的浏览器和测试都在同一台机器上运行,并且您的测试只使用WebDriver API,那么您不需要运行Selenium-Server; WebDriver将直接运行浏览器。 有一些原因可以将Selenium-Server与Selenium-WebDriver一起使用。 您正在使用Selenium-Grid在多台计算机或虚拟机(VM)上分发测试。 您希望连接到具有特定浏览器版本但不在当前计算机上的远程计算机。 您没有使用Java绑定(即Python,C#或Ruby),并且希望使用HtmlUnit Driver 配置Selenium-WebDriver项目 ——————————————————————–安装Selenium意味着在开发中配置项目,以便您可以使用Selenium编写程序。如何执行此操作取决于您的编程语言和开发环境。 这里只列举python配置,更多配置请移步官方文档:https://www.seleniumhq.org/docs/03_webdriver.jsp#introducing-webdriver 如果您使用Python进行测试自动化,那么您可能已经熟悉使用Python进行开发。要将Selenium添加到Python环境,请从命令行运行以下命令。 pip install selenium 从Selenium 1.0迁移 ——————————————————————–对于已经使用Selenium 1.0编写测试套件的用户,我们提供了有关如何将现有代码迁移到Selenium 2.0的提示。Selenium 2.0的首席开发人员Simon Stewart撰写了一篇关于从Selenium 1.0迁移的文章。我们将此作为附录包含在内。从Selenium RC迁移到Selenium WebDriver
====================== Selenium客户端驱动程序 介绍 Selenium 2,又名 WebDriver,它的主要新功能是集成了 Selenium 1.0 以及 WebDriver(WebDriver 曾经是 Selenium 的竞争对手)。也就是说 Selenium 2 是 Selenium 和 WebDriver 两个项目的合并,即 Selenium 2 兼容 Selenium,它既支持 Selenium API 也支持 WebDriver API。 WebDriver是一个用来进行复杂重复的web自动化测试的工具。意在提供一种比Selenium1.0更简单易学,有利于维护的API。它没有和任何测试框架进行绑定,所以他可以很好的在单元测试和main方法中调用。一旦创建好一个Selenium工程,你马上会发现WebDriver和其他类库一样:它是完全独立的,你可以直接使用而不需要考虑其他配置,这个Selenium RC是截然相反的。 selenium包用于自动化Python的Web浏览器交互。 首页: http://www.seleniumhq.org 文件: selenium package API <https://seleniumhq.github.io/selenium/docs/api/py/api.html>_ Dev : https://github.com/SeleniumHQ/Selenium PyPI : https://pypi.org/project/selenium/ IRC : freenode上的#selenium 频道 支持多种浏览器/驱动程序(Firefox,Chrome,Internet Explorer)以及远程协议。 支持的Python版本 Python 2.7,3.4 + 安装 如果你的系统上有pip <https://pip.pypa.io/>_,你可以简单地安装或升级Python绑定:: pip install -U selenium 或者,您可以从PyPI <https://pypi.org/project/selenium/#files>_(例如selenium-3.14.0.tar.gz)下载源代码分发,解压缩它,然后运行:: python setup.py install 注意:您可能需要考虑使用virtualenv <http://www.virtualenv.org/>_来创建隔离的Python环境。 驱动程序 Selenium需要驱动程序与所选浏览器进行交互。火狐,例如,需要geckodriver <https://github.com/mozilla/geckodriver/releases>_,需要先安装才能运行以下示例。确保它在你的PATH中,例如,将它放在/ usr / bin或/ usr / local / bin中。 如果不遵守此步骤,将会出现错误`selenium.common.exceptions.WebDriverException:消息:’geckodriver’可执行文件需要在PATH中。 其他支持的浏览器将有自己的驱动程序可用。下面是一些比较流行的浏览器驱动程序的链接。 Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ Firefox: https://github.com/mozilla/geckodriver/releases Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/ Example0: *打开一个新的Firefox浏览器*在给定的URL加载页面 from selenium import webdriver browser = webdriver.Firefox() browser.get(‘http://seleniumhq.org/’) …