zoukankan      html  css  js  c++  java
  • 爬虫之Selenium

    简介

    selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

    作用: 可以让浏览器完成相关自动化的操作

    和爬虫的关联:

    • 模拟登陆
    • 可以获取动态加载的页面数据

    编码流程:

    • 导包
    • 实例化浏览器对象(驱动)
    • 制定相关自动化的行为动作

    环境安装

    • 下载安装selenium:pip install selenium
    • 下载浏览器驱动程序:
      • http://chromedriver.storage.googleapis.com/index.html
    • 查看驱动和浏览器版本的映射关系:
      • http://blog.csdn.net/huilan_same/article/details/51896672

    简单使用/效果展示

    01:

    复制代码
    复制代码
    from selenium import webdriver
    from time import sleep
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')  
    bro.get('https://www.baidu.com')    #获取的连接页面
    sleep(2)
    #标签定位
    tag_input = bro.find_element_by_id('kw')
    tag_input.send_keys('人民币')   #标签中输入值
    sleep(2)
    
    btn = bro.find_element_by_id('su')   
    btn.click()  #标签点击事件
    sleep(2)
    
    bro.quit()  #退出
    复制代码
    复制代码

    02.

    复制代码
    复制代码
    from selenium import webdriver
    from time import sleep
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    
    bro.get('https://xueqiu.com/')
    sleep(5)
    
    #执行js实现滚轮向下滑动
    js = 'window.scrollTo(0,document.body.scrollHeight)'    #两个参数一个是X轴,一个是y轴,此时用的是Y轴
    bro.execute_script(js)
    sleep(2)
    bro.execute_script(js)
    sleep(2)
    bro.execute_script(js)
    sleep(2)
    bro.execute_script(js)
    sleep(2)
    
    a_tag = bro.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[1]/div[2]/div[2]/a')
    a_tag.click()
    sleep(5)
    #获取当前浏览器页面数据(动态)
    print(bro.page_source)    
    
    bro.quit()
    复制代码
    复制代码

    PhantomJs及谷歌无头浏览器无可视化:

    #PhantomJs是一款无可视化界面的浏览器(免安装)
    
    from selenium import webdriver
    
    from time import sleep
    
    bro = webdriver.PhantomJS(executable_path=r'C:UsersAdministratorDesktop爬虫+数据爬虫day03phantomjs-2.1.1-windowsinphantomjs.exe')
    
     
    
    bro.get('https://xueqiu.com/')
    
    sleep(2)
    
    bro.save_screenshot('./1.png')
    
    #执行js实现滚轮向下滑动
    
    js = 'window.scrollTo(0,document.body.scrollHeight)'
    
    bro.execute_script(js)
    
    sleep(2)
    
    bro.execute_script(js)
    
    sleep(2)
    
    bro.execute_script(js)
    
    sleep(2)
    
    bro.execute_script(js)
    
    sleep(2)
    
    bro.save_screenshot('./2.png')
    
    # a_tag = bro.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[1]/div[2]/div[2]/a')
    
    # bro.save_screenshot('./2.png')
    
    # a_tag.click()
    
    sleep(2)
    
    #获取当前浏览器页面数据(动态)
    
    print(bro.page_source)
    
     
    
    bro.quit()
    
     
    
    现在用的很少,知道即可 
    
    

    from selenium import webdriver from time import sleep from selenium.webdriver.chrome.options import Options # 创建一个参数对象,用来控制chrome以无界面模式打开 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=chrome_options) bro.get('https://www.baidu.com') sleep(2) bro.save_screenshot('1.png') #标签定位 tag_input = bro.find_element_by_id('kw') tag_input.send_keys('人民币') sleep(2) btn = bro.find_element_by_id('su') btn.click() sleep(2) print(bro.page_source) bro.quit() 谷歌无头浏览器
  • 相关阅读:
    深入理解Java:注解(Annotation)--注解处理器
    Java进阶之reflection(反射机制)——反射概念与基础
    JAVA 动态代理
    注解是建立在class文件基础上的东西,同C语言的宏有异曲同工的效果
    Android 进阶8:进程通信之 Binder 机制浅析
    Android Binder机制(一) Binder的设计和框架
    Android Service初解
    原生sql和 TP sql怎么关联?
    Laravel 修改默认日志文件名称和位置
    laravel asset()函数
  • 原文地址:https://www.cnblogs.com/pythonz/p/10933858.html
Copyright © 2011-2022 走看看