zoukankan      html  css  js  c++  java
  • Selenium爬取元素定位

    selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行

    JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转

    、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器  

      Selenium提供了一下方法来定义一个页面中的元素:

    find_element_by_id

    find_element_by_name
    find_element_by_xpath              #根据xpath选取
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector                   #根据css选择器选取

      下面是查找多个元素(这些方法将返回一个列表):

    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_css_selector
      
      查id find_element_by_css_selector(#id)
      查class           find_element_by_css_selector(.class)
      查tag              find_element_by_css_selector(tag)
    
    

       selenium获取其他属性方法

    get_attribute
      获取文字    find_element_by_css_selector('#setf').get_attribute('textContent')
      获取innerhtml    find_element_by_css_selector('#setf').get_attribute('innerHTML')
      获取连接地址    find_element_by_css_selector('#setf').get_attribute('href')

    交互

      send_keys()         输入文字

      clear()          清空文字

      click()          点击动作

    执行JavaScript

      Selenium API并没有提供。比如,下拉进度条,它可以直接模拟运行JavaScript,

      此时使用execute_script()方法即可实现

    1. browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    2. browser.execute_script('alert("123")')

    动作链

      实例中,一些交互动作都是针对某个节点执行的。比如,对于输入框,我们就调用它的输入文字和清空文字方法;

      对于按钮,就调用它的点击方法。其实,还有另外一些操作,它们没有特定的执行对象,比如鼠标拖曳、键盘按键等,

      这些动作用另一种方式来执行,那就是动作链。

      比如,现在实现一个节点的拖曳操作,将某个节点从一处拖曳到另外一处,可以这样实现:

      

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    import time
    browser = webdriver.Chrome()
    url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
    browser.get(url)
    browser.switch_to.frame('iframeResult')
    source = browser.find_element_by_css_selector('#draggable')
    target = browser.find_element_by_css_selector('#droppable')
    actions = ActionChains(browser)
    # actions.drag_and_drop(source, target)
    actions.click_and_hold(source)
    time.sleep(3)
    for i in range(5):
        actions.move_by_offset(xoffset=17,yoffset=0).perform()
        time.sleep(0.5)
    actions.release()

     

  • 相关阅读:
    ASP.NET实现进度条效果【转】
    删除指定创建日期前的文件夹、文件
    MS SQL SERVER执行大脚本文件时,提示“内存不足”的解决办法
    solr之functionQuery(函数查询)【转】
    解决Jenkins连接git时报错Permission denied (publickey)
    vscode csharp c#开发 自动引入命名空间
    nginx配置后外网无法访问
    jenkins node 版本无法使用最新的版本
    jenkins npm install WARN checkPermissions Missing write access 权限问题
    小程序setData只修改对象中的某个属性的方法
  • 原文地址:https://www.cnblogs.com/sunny666/p/10615803.html
Copyright © 2011-2022 走看看