zoukankan      html  css  js  c++  java
  • Python爬虫之selenium高级功能

    Python爬虫之selenium高级功能

    原文地址

    表单操作

    元素拖拽

    页面切换

    弹窗处理

    表单操作

    表单里面会有文本框、密码框、下拉框、登陆框等。

    这些涉及与页面的交互,比如输入、删除、点击等。

    前提是找到页面中的元素。

    例如下面有一个表单输入框:

    <input type="text" name="passwd" id="passwd-id" />

    获取这个元素的方法:

    element = driver.find_element_by_id("passwd-id")
    element = driver.find_element_by_name("passwd")
    element = driver.find_elements_by_tag_name("input")
    element = driver.find_element_by_xpath("//input[@id='passwd-id']")

    注意:使用 xpath 的时候还需要注意的是,如果有多个元素匹配了 xpath,它只会返回第一个匹配的元素。如果没有找到,那么会抛出 NoSuchElementException 的异常。

    获取元素之和就要进行输入与点击操作了

    输入:

    element.send_keys("some text")

    点击:

    利用 Keys 这个类来模拟点击某个按键,当然首先你要获取按键元素。

    element.send_keys("and some", Keys.ARROW_DOWN)

    第二种方法:我们获取了按键元素,我们就可以使用click方法点击了

    button = broswer.find_element_by_class_name('btn-search')
    #点击按钮
    button.click() 

    删除:

    当你元素使用send.keys方法输入字符后,输入的内容不会自动清除,如果我们要输入第二次,就要把第一次的内容删除掉:

    element.clear()

    上面都是简单的操作,如果我们遇到下拉框应该怎么办呢

     WebDriver 中提供了一个叫 Select 的方法,可以帮助我们完成这些事情。

    可以根据索引来选择,可以根据值来选择,可以根据文字来选择。

    from selenium.webdriver.support.ui import Select
    select = Select(driver.find_element_by_name('name'))
    select.select_by_index(index)
    select.select_by_visible_text("text")
    select.select_by_value(value)

    取消全部选择:

    select = Select(driver.find_element_by_id('id'))
    select.deselect_all()

    获取已选选择:

    select = Select(driver.find_element_by_xpath("xpath"))
    all_selected_options = select.all_selected_options

    获取可选选项:

    options = select.options

    最后提交表单:

    driver.find_element_by_id("submit").click()

    注意:WebDriver 会在表单中寻找它所在的表单,如果发现这个元素并没有被表单所包围,那么程序会抛出 NoSuchElementException 的异常。

    元素拖拽

    要完成元素的拖拽,首先你需要指定被拖动的元素和拖动目标元素,然后利用 ActionChains 类来实现。

    element = driver.find_element_by_name("source")
    target = driver.find_element_by_name("target")
    
    from selenium.webdriver import ActionChains
    action_chains = ActionChains(driver)
    action_chains.drag_and_drop(element, target).perform()

    这样就实现了元素从 source 拖动到 target 的操作。

    页面切换

    一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:

    driver.switch_to_window("windowName")

    另外你可以使用 window_handles 方法来获取每个窗口的操作对象。例如:

    for handle in driver.window_handles:
        driver.switch_to_window(handle)

    另外切换 frame 的方法如下

    driver.switch_to_frame("frameName.0.child")

    这样焦点会切换到一个 name 为 child 的 frame 上。

     

    弹窗处理

    当你出发了某个事件之后,页面出现了弹窗提示,那么你怎样来处理这个提示或者获取提示信息呢?

    alert = driver.switch_to_alert()

    通过上述方法可以获取弹窗对象。

  • 相关阅读:
    sql Test
    使用Team Foundation Server进行源代码管理
    幸运的秘密
    使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
    发布.net项目开发工具新版
    C#.Net项目生成器(ibatis)使用说明
    敏捷开发,Agile Development
    单元测试基础篇VS2008
    iBATIS.NET
    IBatis.Net学习笔记系列
  • 原文地址:https://www.cnblogs.com/-wenli/p/10897363.html
Copyright © 2011-2022 走看看