• 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")

  • 相关阅读:
    freeebsd,pkg_add,svsup,make改服务器的设定
    采用dhcp的Failover协议实施dhcp的热备份
    FreeBSD断电后,自动检测并修复文件系统
    WinXP、Win7脚本自动加域及用户资料迁移
    支除桌面右键显卡控制面板
    BSD平台中整合samba与win2003 AD
    企业Windows Server 2008活动目录备份和灾难恢复详解
    FreeBSD 6.2 上使用 PF 防火墙
    部署到服务器后,导出Excel发生错误Retrieving the COM class factory for component with CLSID {0002450000000000C000000000000046}
    Jquery1.6版本以上调用WebService
  • 原文地址:https://www.cnblogs.com/yjlch1016/p/8476628.html
Copyright © 2020-2023  润新知