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()

     

  • 相关阅读:
    kill eclipse
    C语言之表达式运算整体提升
    查找函数对比:findall,search,match
    Linux backtrace()
    git本地协同
    git 撤销push到服务器的代码
    gtest
    C陷阱篇之enum默认长度
    程序员中文开发者手册
    C语言错题分析
  • 原文地址:https://www.cnblogs.com/sunny666/p/10615803.html
Copyright © 2011-2022 走看看