• 动态渲染页面抓取


    一、selenium的使用:

      1、简介:

        是一个自动化的工具,可以利用它驱动浏览器执行特定的动作。

      2、基本使用:

        

     1 from selenium import webdriver
     2 
     3 from selenium.webdriver.common.by import By
     4 from selenium.webdriver.common.keys import Keys
     5 from selenium.webdriver.support import expected_conditions as ec
     6 from selenium.webdriver.support.wait import WebDriverWait
     7 
     8 #完成浏览器对象的初始化并赋值为browser对象
     9 browser=webdriver.Chrome()
    10 # browser=webdriver.Edge()
    11 try:
    12     #访问百度网址,然后获得源代码
    13     browser.get('https://www.baidu.com')
    14     #根据id来获取节点
    15     input=browser.find_element_by_id('kw')
    16     input.send_keys('python')
    17     input.send_keys(Keys.ENTER)
    18     wait=WebDriverWait(browser,10)
    19     wait.until(ec.presence_of_all_elements_located((By.ID,'content_left')))
    20     print(browser.current_url)
    21     print(browser.get_cookies())
    22     print(browser.page_source)
    23 finally:
    24     browser.close()

      3、获取节点:

        (1)获取节点的方法:

               find_element_by_id

                 find_element_by_name
            find_element_by_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

        (2)获得所有节点:

            find_elements_

       4、节点交互:

         输入文字:send_keys()

         清空文字:clear() 

         按钮点击:click()

       5、执行js代码:

        

    1 from selenium import webdriver
    2 
    3 driver=webdriver.Chrome()
    4 
    5 driver.get('https://www.zhihu.com/explore')
    6 driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    7 driver.execute_script('alert("To Bottom")')
    8 driver.close()

        6、获取节点信息:

        (1)首先要先选中节点。

        (2)操作:

        

     1 '''
     2     func:执行cs代码
     3 '''
     4 
     5 from selenium import webdriver
     6 
     7 browser=webdriver.Chrome()
     8 #
     9 # driver.get('https://www.zhihu.com/explore')
    10 # driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    11 # driver.execute_script('alert("To Bottom")')
    12 # driver.close()
    13 url = 'https://www.zhihu.com/explore'
    14 browser.get(url)
    15 
    16 #选中想要的节点
    17 # node=browser.find_element_by_id('zh-top-link-logo')
    18 # print(node,node.get_attribute('class'))
    19 #获取文本值
    20 n1=browser.find_element_by_class_name('zu-top-add-question')
    21 print(n1.text)
    22 
    23 browser.close()

          (3)获取id:  .id

            获取页面的相对位置: .location

          获取标签名: .tag_name

          获取节点大小: .size

       7、切换frame:

          browser.switch_to.frame('framename')

          返回到父frame:

          browser.switch_to.parent_frame()

       8、延时等待:

          (1)隐式等待:

            忽略

          (2)显示等待:

            

     1 from selenium import webdriver
     2 from selenium.webdriver.common.by import By
     3 from selenium.webdriver.support.ui import WebDriverWait
     4 from selenium.webdriver.support import expected_conditions as ec
     5 
     6 browser = webdriver.Chrome()
     7 # browser.implicitly_wait(10)
     8 # browser.get('https://www.zhihu.com/explore')
     9 # input = browser.find_element_by_class_name('zu-top-add-question')
    10 # print(input)
    11 browser.get('https://www.taobao.com/')
    12 wait=WebDriverWait(browser,10)
    13 input=wait.until(ec.presence_of_element_located((By.ID,'q')))
    14 button=wait.until(ec.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))
    15 print(input,button)
    16 browser.close()

         9、等待条件:

          

    11、前进和后退:

      .back()方法  后退

      .forward() 前进

    12、cookies:

      

     1 '''
     2     func:cookie操作
     3 '''
     4 from selenium import webdriver
     5 
     6 browser=webdriver.Chrome()
     7 browser.get('https://www.zhihu.com/explore')
     8 #获取cookie信息
     9 print(browser.get_cookies())
    10 #添加cookie信息
    11 browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})
    12 
    13 print(browser.get_cookies())
    14 #删除所有的cookie
    15 browser.delete_all_cookies()
    16 print(browser.get_cookies())
    17 browser.close()

    13、选项卡管理:

      

     1 '''
     2     func:选项卡管理
     3 '''
     4 import time
     5 from selenium import webdriver
     6 
     7 browser = webdriver.Chrome()
     8 browser.get('https://www.baidu.com')
     9 browser.execute_script('window.open()')
    10 print(browser.window_handles)
    11 #切换选项卡
    12 browser.switch_to_window(browser.window_handles[1])
    13 browser.get('https://www.taobao.com')
    14 time.sleep(1)
    15 browser.switch_to_window(browser.window_handles[0])
    16 browser.get('https://python.org')
    17 browser.close()

    14、异常处理:

      

         

  • 相关阅读:
    爬虫1 爬虫介绍, requests模块, 代理(正向代理,反向代理), 爬梨视频, 自动登录网站, HTTP协议复习, 伪静态概念, 301和302状态码区别, http版本0.9 1.1 和2.0的区别
    数据结构 线性结构(数组[列表] ,链表 单链表的增删改查**, 线性结构的应用 队列 栈[函数的调用**]),非线性结构 树
    算法 时间复杂度, 空间复杂度, 冒泡排序**, 选择排序, 插入算法, 快速排序**, 希尔算法,计数排序, 二分法查找**
    量化分析 在线量化分析网站
    数据分析3 matplotlib绘图, 折线图(刻度与范围,标题,注释), 曲线图例, 过滤报警信息, 柱状图, 曲线图, 饼图
    [编织消息框架][netty源码分析]6 ChannelPipeline 实现类DefaultChannelPipeline职责与实现
    [编织消息框架][netty源码分析]5 EventLoopGroup 实现类NioEventLoopGroup职责与实现
    [编织消息框架][netty源码分析]4 EventLoop 实现类NioEventLoop职责与实现
    编程之路
    [编织消息框架][netty源码分析]3 EventLoop 实现类SingleThreadEventLoop职责与实现
  • 原文地址:https://www.cnblogs.com/monty12/p/9996722.html
Copyright © 2020-2023  润新知