zoukankan      html  css  js  c++  java
  • selenium(Python)总结

    Python相关:(Ubuntu下)

    参考http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.quit

    1.下载selenium server(该服务需要运行在Java环境下,需要安装jdk)

    下载的是一个jar包,放在Java安装路径的lib文件夹下。

    2.安装Python相关的依赖 pip install selenium

    3.使用Firefox浏览器时,在Ubuntu下需要下载 geckodriverckod https://github.com/mozilla/geckodriver/releases
    解压放到/usr/local/bin 目录下。

    webdriver支持的浏览器:

    webdriver.Firefox
    webdriver.FirefoxProfile
    webdriver.Chrome
    webdriver.ChromeOptions
    webdriver.Ie
    webdriver.Opera
    webdriver.PhantomJS
    webdriver.Remote
    webdriver.DesiredCapabilities
    webdriver.ActionChains
    webdriver.TouchActions
    webdriver.Proxy

    from selenium import webdriver

    driver = webdriver.Firefox()


    元素定位:

    1.可以通过这几种方法来查找元素 返回单个元素
    element = driver.find_element_by_id("passwd-id")
    element = driver.find_element_by_name("passwd")
    element = driver.find_element_by_xpath("//input[@id='passwd-id']")
    element = driver.find_element_by_link_text(“百度链接”)
    element = driver.find_element_by_partial_link_text(“百度”)类似模糊查询,输入链接text的一部分
    element = driver.find_element_by_tag_name(‘h1’)返回第一个h1标签
    element = driver.find_element_by_class_name(‘content’)返回类名为content的标签
    element = driver.find_element_by_css_selector('p.content')返回如下的第一个p 标签
    <p class="content">Site content goes here.</p>
    这个类似css的选择器

    2.返回元素列表:
    find_elements_by_name
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector

    find_element_by_ 会返回第一个符合条件的元素,当找不到元素时会报NoSuchElementException异常

    当没有ID和name属性时,使用xpath
    当知道<a>text</a>标签的text时 使用linkText


    selenium提供两种方法定位元素:还有如下一种方法 这种方法效率更高,但是第一种更符合使用习惯
    from selenium.webdriver.common.by import By

    通过By类
    driver.find_element(By.XPATH, '//button[text()="Some text"]')
    driver.find_elements(By.XPATH, '//button')
    driver.find_elements(By.ID,“hshg-id”)
    其他属性同第一种方法,都换成大写

    Keys包用来模拟键盘操作

    from selenium.webdriver.common.keys import Keys

    对于Keys 类下有哪些属性,可以在ipython中查看(已安装selenium)

    下拉页面(相当于滑动下拉框到底部)
    elem.send_keys(Keys.PageDown)

    Keys.BACK_SPACE 删除键

    Keys.SPACE 空格键

    Keys.ENTER 回车键

    send_keys(Keys.CONTROL,'a') 全选
    send_keys(Keys.CONTROL,'c') 复制
    send_keys(Keys.CONTROL,'x') 剪切
    send_keys(Keys.CONTROL,'v') 粘贴

    elem.send_keys("python")
    elem.send_keys(Keys.RETURN) 类似鼠标点击进入
    上面两句可以合写一句elem.send_keys("123",Keys.RETURN)

    窗体相关方法:

    导航网页 位置

    driver.get("http://www.example.com") 进入某一网页

    driver.forward() 前进

    driver.back() 后退

    execute_script(script*args)  在当前窗口执行js 代码 (js代码自己写)

    driver.execute_script("window.scrollTo(arguments[0], arguments[1]);",50,500) 传参使用内部的arguments列表

    driver.create_web_element(element_id)  使用指定的元素id创建一个web元素

    driver.fullscreen_window()   调用窗口管理器特定的“全屏”操作

    driver.page_source 整个页面的HTML代码 当前打开的页面

    driver.title 网页的标题<title>标签中的文字

    get_screenshot_as_base64()

    获取当前窗口的屏幕截图,作为base64编码的字符串
    这对于嵌入在HTML中的嵌入图像很有用

    get_screenshot_as_file(filename) save_screenshot(filename) 两方法等同
    driver.get_screenshot_as_file(‘/Screenshots/foo.png’)
    将当前窗口的屏幕截图保存到PNG图像文件中。返回
    如果有任何的IOError,则返回True。在文件名中使用完整路径。

    get_screenshot_as_png()
    将当前窗口的屏幕截图作为二进制数据。

    get_window_position(windowHandle='current')
    得到当前窗口x y 的位置

    driver.get_window_position() 默认可以不写

    get_window_rect()
    得到窗口的x,y坐标,以及当前窗口的高度和宽度。

    get_window_size(windowHandle='current')
    得到当前窗口的高度和宽度

    implicitly_wait(time_to_wait)
    设置一个隐式的等待超时,当元素找到就往下执行,否则超过时间就报异常

    driver.implicitly_wait(30) second

    quit()
    退出驱动程序并关闭所有相关的窗口

    close()
    关闭当前窗口

    refresh()
    刷新当前网页.

    minimize_window()
    调用窗口管理器特定的“最小化”操作

    maximize_window()
    最大化当前使用窗口

    set_page_load_timeout(time_to_wait)
    设置等待页面加载完成所需的时间 超时抛异常

    set_script_timeout(time_to_wait)
    设置脚本在一个时间内等待的时间,在抛出错误之前执行executeasyncscript调用

    driver.current_url 正在加载页面的URL(driver相当于窗口)

    current_window_handle
    返回当前窗口的句柄

    driver.name 返回低层调用浏览器名字

    window_handles
    在当前会话中返回所有窗口的句柄。

    元素相关操作:

    elem = driver.find_element_by_id("btn_id")

    clear()
    elem.clear()
    如果是文本输入元素,就清除文本

    click()
    点击元素

    send_keys(*value)
    模拟输入元素 使用此方法发送简单的关键事件或填写表单字段

    submit()
    提交表单


    get_attribute(name)
    获得元素的属性,不存在时返回None
    elem.get_attribute("class")

    get_property(name)
    获得元素的属性
    elem.get_property("text_length")


    value_of_css_property(property_name)
    获取CSS属性

    text
    返回元素的文本

    is_displayed()
    判断该元素是否对用户可见


    is_enabled()
    判断是否使用了该元素

    is_selected()
    判断元素是否被选择,用于选框

    screenshot(filename)
    将当前元素的屏幕截图保存到PNG图像文件中。返回
    如果有任何的IOError,则返回True。在文件名中使用完整路径
    element.screenshot(‘/Screenshots/foo.png’)

    id
    elem.id 获取的不是属性ID, 是存储位置


    location_once_scrolled_into_view
    这种性质可能在没有任何警告的情况下发生变化。使用这个来发现屏幕上的元素是什么,
    这样我们就可以点击它了。这个方法应该使元素被滚动到视图中。

    rect
    返回元素大小和位置的字典

    弹出框:

    from selenium.webdriver.common.alert import Alert

    创建alert对象:alert = Alert(driver)
    或者alert = driver.switch_to_alert()   不推荐使用这种方法

    Alert(driver).accept() 同意


    常用方法:直接用对象调用以下方法
    accept() 同意弹出框

    authenticate(username, password)
    将用户名/密码发送到经过身份验证的对话框(如基本的HTTP身份验证)。隐式地“单击ok”

    driver.switch_to.alert.authenticate(‘cheese’, ‘secretGouda’)

    dismiss()
    不同意

    send_keys(keysToSend)
    向弹出框发送text

    text属性 获取弹出框的文本
    alert_text = Alert(driver).text

    Cookies:

    设置cookie
    # Now set the cookie. This one's valid for the entire domain
    cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}
    driver.add_cookie(cookie)
    获取cookie
    # And now output all the available cookies for the current URL
    driver.get_cookies()  获取所有的cookie

    get_cookie(name)   根据cookie名获取指定的cookie

    delete_all_cookies()     删除所有的cookie

    delete_cookie(name)   根据cookie名删除指定的cookie

    设置等待页面加载时间:
    通过time模板设置sleep时间,不能确定是否加载
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    try:
    element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
    finally:
    driver.quit()

    在抛出TimeoutException之前,它等待10秒,除非它在10秒内找到返回的元素。


    常用的场景:selenium中提供的场景

    title_is
    title_contains
    presence_of_element_located
    visibility_of_element_located
    visibility_of
    presence_of_all_elements_located
    text_to_be_present_in_element
    text_to_be_present_in_element_value
    frame_to_be_available_and_switch_to_it
    invisibility_of_element_located
    element_to_be_clickable
    staleness_of
    element_to_be_selected
    element_located_to_be_selected
    element_selection_state_to_be
    element_located_selection_state_to_be
    alert_is_present

    wait = WebDriverWait(driver, 10) 固定等待时间
    element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))


    隐式等待告诉WebDriver在尝试查找任何元素(或元素)不立即可用时,在一定的时间内对DOM进行轮询。
    默认设置为0。一旦设置好了,就为WebDriver对象的生命设置了隐式等待

    driver.implicitly_wait(10) # seconds
    当前页面任何元素不可用,都等待。等待时间不确定,并不是等待设置时间,当查询的元素可用,程序既向下走

    myDynamicElement = driver.find_element_by_id("myDynamicElement")

    动作链相关对鼠标的操作:
    from selenium.webdriver.common.action_chains import ActionChains

    actions = ActionChains(driver)
    actions.move_to_element(menu) 鼠标移动到元素
    actions.click(hidden_submenu) 鼠标点击(点击前可以不需要移动到元素)
    actions.perform() 执行以上操作  使用动作链操作最后都必须选择执行才生效

    ActionChains(driver).move_to_element(elem).click(elem).perform()上面三句可以连着写

    常见操作:
    click(on_element=None)
    如果元素存在,点击元素。如果不存在点击鼠标当前位置

    click_and_hold(on_element=None)
    在一个元素上按下鼠标左键。素。如果不存在在鼠标当前位置点击鼠标右键

    context_click(on_element=None)
    在元素上执行上下文单击(右键单击)

    double_click(on_element=None)
    双击一个元素

    drag_and_drop(source, target) 拖拽一个元素到另一个位置
    在源元素上保留鼠标左键,
    然后移动到目标元素并释放鼠标按钮

    drag_and_drop_by_offset(source, xoffset, yoffset)
    在源元素上保留鼠标左键,
    然后移动到目标偏移量并释放鼠标按钮

    key_down(value, element=None)
    只发送一个键盘按键,而不释放它。仅被用于修饰符键(Ctrl、Alt和Shift键 enter等)。

    value来源于键盘 通过Key类来发送
    element存在时,通过元素send keys,不存在发送keys到焦点元素

    key_up(value, element=None)
    释放一个修饰符的键

    这两个一起用如按 ctrl+c
    ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

    ActionChains(driver).key_down(Keys.ENTER).key_up(Keys.ENTER).perform() 通过鼠标输入enter键

    move_by_offset(xoffset, yoffset)
    根据当前鼠标位置偏移

    move_to_element(to_element)
    移动鼠标到元素上

    move_to_element_with_offset(to_element, xoffset, yoffset)
    将鼠标移动到指定元素的偏移量。
    偏移量是相对于元素的左上角的


    pause(seconds)
    暂停

    perform()
    执行所有存储操作

    release(on_element=None)
    在元素上释放一个鼠标按钮

    reset_actions()
    清除已经存储在远程终端上的操作

    send_keys(*keys_to_send)
    将键发送到当前焦点元素
    参数使用Key类中的属性

    send_keys_to_element(element, *keys_to_send)
    像元素发送键

    UI支持:
    from selenium.webdriver.support.select import Select

    只作用select标签
    select = Select(select_element)

    deselect_all()
    清除所有选中的条目 取消勾选

    deselect_by_index(index)
    通过索引清除

    deselect_by_value(value)
    通过option的value来清除
    <option value=”foo”>Bar</option>

    deselect_by_visible_text(text)
    <option value=”foo”>Bar</option>
    通过text来取消勾选

    select_by_index(index)
    通过索引选择

    select_by_value(value)

    select_by_visible_text(text)

    all_selected_options
    返回所有选中的option列表

    first_selected_option
    返回第一个被选中的option

    options
    返回select下所有的option标签列表

    期待事件 多用在assert中:
    import selenium.webdriver.support.expected_conditions

    selenium.webdriver.support.expected_conditions.element_to_be_clickable(locator)
    判断页面是否有元素可点击
    locator is a tuple of (by, path)

    selenium.webdriver.support.expected_conditions.element_to_be_selected(element)
    判断元素是否被选择

    selenium.webdriver.support.expected_conditions.alert_is_present
    期待弹出框出现


    selenium.webdriver.support.expected_conditions.title_contains(title)
    判断标题包括

    selenium.webdriver.support.expected_conditions.url_changes(url)
    判断URL改变

    selenium.webdriver.support.expected_conditions.url_matches(pattern)
    判断URL是否匹配 pattern期待的URL 和当前URL对比

  • 相关阅读:
    自己的第一个网页
    第一次爬虫测试
    科学计算与可视化
    python自顶向下的设计方法进行体育竞技分析
    python PIL库的相关操作
    python 关于身份证号码的相关操作
    jieba库
    汉诺塔
    Django项目中运行Scrapy项目
    **Django+Echart实现多个饼状图(echart数据格式问题 {value: 135, name: '视频广告'})
  • 原文地址:https://www.cnblogs.com/mayyan/p/7998473.html
Copyright © 2011-2022 走看看