zoukankan      html  css  js  c++  java
  • selenium自动化模块的应用

    一、selenium概念

      1、用来完成浏览器自动化的相关操作

      2、使用程序编写一系列的键盘、鼠标的相关操作(让浏览器来完成), 当我们执行代码时,就会触发一系列的事件

    二、selenium在爬虫中的作用

      1、可以获取动态加载的数据

    三、selenium安装

      1、pip install selenium

      2、下载浏览器驱动程序: http://chromedriver.storage.googleapis.com/index.html (找到最接近的版本)

    四、selenium使用

      1、导包: from selenium import webdriver

      2、实例化某一款浏览器的驱动,获取一个对象

      3、使用对象中的相关方法制定一系列的事件(键盘、鼠标的相关操作)

    五、简单案例,打开百度

    from selenium import webdriver
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    bro.get("https://www.baidu.com")
    
    bro.close()

    六、自动打开百度,搜素刘德华

    # 百度搜索刘德华案例
    import time
    from selenium import webdriver
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    bro.get("https://www.baidu.com")
    
    # 1. 定位到输入框
    kw = bro.find_element_by_id("kw")
    
    # 2. 键入刘德华关键字
    kw.send_keys("刘德华")
    time.sleep(5)
    
    # 3. 定位到"百度一下"按钮
    input_key = bro.find_element_by_id("su")
    
    # 4. 触发点击事件
    input_key.click()
    time.sleep(5)
    
    bro.close()

    七、爬取雪球网

    from selenium import webdriver
    
    bro = webdriver.Chrome('./chromedriver.exe')
    bro.get('https://xueqiu.com')
    
    
    # 获取动态加载的数据
    print(bro.page_source)
    
    bro.quit()

    八、爬取雪球网的更多数据

    import time
    from selenium import webdriver
    
    bro = webdriver.Chrome('./chromedriver.exe')
    bro.get('https://xueqiu.com')
    
    js = "window.scrollTo(0, document.body.scrollHeight)" # 表示滚轮往下拖动一屏的高度
    
    bro.execute_script(js)
    time.sleep(2)
    
    bro.execute_script(js)
    time.sleep(2)
    
    bro.execute_script(js)
    time.sleep(2)
    
    bro.execute_script(js)
    time.sleep(2)
    
    # 获取动态加载的数据
    print(bro.page_source)
    
    bro.quit()

    九、谷歌无头浏览器

    import time
    from selenium import webdriver
    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', chrome_options=chrome_options)
    bro.get("https://www.baidu.com")
    
    # 截图
    bro.save_screenshot('3.jpg')
    
    # 1. 定位到输入框
    kw = bro.find_element_by_id("kw")
    
    # 2. 键入刘德华关键字
    kw.send_keys("刘德华")
    time.sleep(2)
    
    # 3. 定位到"百度一下"按钮
    input_key = bro.find_element_by_id("su")
    
    # 4. 触发点击事件
    input_key.click()
    # 截图
    bro.save_screenshot('4.jpg')
    time.sleep(2)
    
    bro.close()

    十、前进和后退

    import time
    from selenium import webdriver
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    
    # 注意: bro对象只有将页面完全加载完成之后,才会进行下一步的事件触发
    bro.get("https://www.baidu.com")
    bro.get("https://www.taobao.com")
    bro.get("https://www.jd.com")
    time.sleep(2)
    
    # 后退
    bro.back()
    time.sleep(2)
    
    # 前进
    bro.forward()
    time.sleep(2)
    
    bro.close()

    十一、动作链。拖动iframe标签

    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
    
    # 定位到页面中的iframe标签内部,这样才可以定位到它内部的标签
    bro.switch_to.frame("iframeResult")
    
    # 实例化一个动作链对象,将浏览器对象加载到这个动作链对象中
    actions = ActionChains(bro)
    # 1. 定位“请拖拽我”标签
    source_tag = bro.find_element_by_id("draggable")
    # 2. 点击“请拖拽我”, 并拖动
    actions.click_and_hold(source_tag)
    
    for i in range(1, 6):
        actions.move_by_offset(50,0)
        time.sleep(1)
    
    actions.perform()  # 执行所有动作链
    
    time.sleep(2)
    
    bro.close()

    十二、动作链,拖动iframe标签到指定的地方

    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    bro = webdriver.Chrome(executable_path='./chromedriver.exe')
    bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
    
    # 定位到页面中的iframe标签内部,这样才可以定位到它内部的标签
    bro.switch_to.frame("iframeResult")
    
    # 实例化一个动作链对象,将浏览器对象加载到这个动作链对象中
    actions = ActionChains(bro)
    # 1. 定位“请拖拽我”标签
    source_tag = bro.find_element_by_id("draggable")
    target_tag = bro.find_element_by_id('droppable')
    
    # 点击并拖动,并丢弃
    actions.click_and_hold(source_tag)
    for i in range(1, 6):
        actions.move_by_offset(30,0)
        time.sleep(1)
    actions.drag_and_drop(source_tag, target_tag)
    
    actions.perform()  # 执行所有动作链
    
    bro.close()

    十三、获取cookie

    from selenium import webdriver
    from selenium.webdriver import Chrome
    from selenium.webdriver import ChromeOptions
    
    option = ChromeOptions()
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    
    browser = webdriver.Chrome('./chromedriver.exe', options=option)
    browser.get('https://www.baidu.com')
    print(browser.get_cookies())
    
    # browser.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'germey'})
    # print(browser.get_cookies())
    
    # browser.delete_all_cookies()
    # print(browser.get_cookies())
  • 相关阅读:
    MVC 与传统的 webform 的比较
    Visual Studio 类模板的修改
    2015-3-3
    SQL SERVER类型与C#类型对照
    数据库连接串的配置
    Could not load file or assembly 'System.Web.Mvc' or one of its dependencies. The located assembly's manifest definition does not
    多条查询sql语句返回多表数据集
    URL和搜索引擎优化
    XPath 语法示例
    如何把数据库的某个字段更新为另一个字段
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12176181.html
Copyright © 2011-2022 走看看