zoukankan      html  css  js  c++  java
  • 3-Python爬虫-动态HTML/Selenium+PhantomJS/chrome无头浏览器-chromedriver

    动态HTML

    爬虫跟反爬虫

    动态HTML介绍

    • JavaScrapt
    • jQuery
    • Ajax
    • DHTML
    • Python采集动态数据
      • 从Javascript代码入手采集
      • Python第三方库运行JavaScript,直接采集你在浏览器看到的页面

    Selenium + PhantomJS

    • Selenium: web自动化测试工具
    • PhantomJS(幽灵)
    • Selenium 库有有一个WebDriver的API
    • WebDriver可以跟页面上的元素进行各种交互,用它可以来进行爬取
    • 案例 v36
    • chrome + chromedriver
      • 下载安装chrome: 下载+安装
      • 下载安装chromedriver:
    • Selenium操作主要分两大类:
      • 得到UI元素
        • find_element_by_id
        • 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
      • 基于UI元素操作的模拟
        • 单击
        • 右键
        • 拖拽
        • 输入
        • 可以通过导入ActionsChains类来做到
      • 案例37

    案例v36

    '''
    通过webdriver操作进行查找1
    '''
    
    
    
    from selenium import webdriver
    import time
    
    
    
    
    # 通过Keys模拟键盘
    from selenium.webdriver.common.keys import  Keys
    
    # 操作哪个浏览器就对哪个浏览器建一个实例
    # 自动按照环境变量查找相应的浏览器
    driver = webdriver.PhantomJS()
    
    # 如果浏览器没有在相应环境变量中,需要指定浏览器位置
    
    
    driver.get("http://www.baidu.com")
    
    
    # 通过函数查找title标签
    print("Title: {0}".format(driver.title))
    

    案例v37

    from selenium import webdriver
    import time
    from selenium.webdriver.common.keys import  Keys
    
    # 可能需要手动添加路径
    driver = webdriver.Chrome()
    
    url = "http://www.baidu.com"
    
    
    driver.get(url)
    
    
    text = driver.find_element_by_id('wrapper').text
    print(text)
    print(driver.title)
    # 得到页面的快照
    driver.save_screenshot('index.png')
    
    # id="kw" 的是百度的输入框,我们得到输入框的ui元素后直接输入“大熊猫"
    driver.find_element_by_id('kw').send_keys(u"大熊猫")
    
    # id="su"是百度搜索的按钮,click模拟点击
    driver.find_element_by_id('su').click()
    
    time.sleep(5)
    driver.save_screenshot("daxiongmao.png")
    
    
    #获取当前页面的cookie
    print(driver.get_cookies())
    
    # 模拟输入两个按键 ctrl+ a
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
    #ctr+x 是剪切快捷键
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')
    
    driver.find_element_by_id('kw').send_keys(u'航空母舰')
    driver.save_screenshot('hangmu.png')
    
    driver.find_element_by_id('su').send_keys(Keys.RETURN)
    
    time.sleep(5)
    driver.save_screenshot('hangmu2.png')
    
    
    # 清空输入框 , clear
    driver.find_element_by_id('kw').clear()
    driver.save_screenshot('clear.png')
    
    # 关闭浏览器
    driver.quit()
    

    selenium自动化测试 工具:

    -用selenium登录的时候,先要get到页面;
    -get到页面之后就可以准备输入了,
    -selenium可以模拟输入;
    -selenium调没有界面的chrome或者PhantomJS
    -保存快照,手动输入,对静态验证码的一大杀手。

  • 相关阅读:
    Leetcode#145 Binary Tree Postorder Traversal
    Leetcode#146 LRU Cache
    单引号和双引号的区别
    $* $@ $#
    pthread_detach
    pthread_join
    intent 启动activity、service的方法
    multicast based on udp
    ARM指令系统
    ARM寄存器
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10031382.html
Copyright © 2011-2022 走看看