zoukankan      html  css  js  c++  java
  • selenium的常用API及案例演示

    1.selenium介绍

    # 介绍:
    1.selenium是一个web自动化测试用的框架. 程序员可以通过代码实现对浏览器的控制, 比如打开网页, 点击网页中的元素, 实现鼠标滚动等操作.
    2.它支持多款浏览器, 如谷歌浏览器, 火狐浏览器等等, 当然也支持无头浏览器.
    
    # 目的:
    在爬取数据的过程中, 经常遇到动态数据加载, 一般动态数据加载有两种, 一种通过ajax请求加载数据, 另一种通过js代码加载动态数据. selenium可以模拟人操作真实浏览器, 获取加载完成的页面数据
    ajax:
        url有规律且未加密, 直接构建url连接请求
        url加密过无法破解规律 --> selenium
    js动态数据加载 -->  selenium
    

    2.selenium安装

    三要素: 浏览器, 驱动程序, selenium框架
    	浏览器: 推荐谷歌浏览器, 标准稳定版本
    	驱动程序:http://chromedriver.storage.googleapis.com/index.html
    	pip install selenium
        
    # 测试:
    from selenium import webdriver
    browser = webdriver.Chrome('./webdriver')   # 将驱动放在脚本所在的文件夹
    browser.get('www.baidu.com')
    

    3.selenium常用操作

    # 实例化浏览器对象:
    from selenium import webdriver
    browser = webdriver.Chrome('driverpath')
    
    # 发送get请求:
    browser.get('https://www.baidu.com')
    
    # 获取页面元素:
    find_element_by_id():根据元素的id
    find_element_by_name():根据元素的name
    find_element_by_xpath():根据xpath表达式
    find_element_by_class_name():根据class的值
    find_element_by_css_selector():根据css选择器
    find_element_by_link_text():根据超链接文本定位
    find_element_by_partial_link_text():根据超文本的一部分定位
    
    # 节点交互操作:
    click(): 点击
    send_keys(): 输入内容
    clear(): 清空操作
    execute_script(js): 执行指定的js代码
    # JS代码:    window.scrollTo(0, document.body.scrollHeight)滚动一屏高度
    # 			弹出:alert('12345678')
    # 			停止加载:window.stop()
    quit(): 退出浏览器
    browser.quit()
    
    # 获取网页的源码:
    browser.page_source   --->  str类型
    
    #iframe标签(子页面)
    browser.switch_to.frame('frameid') 跳转子页面
    如果iframe标签没有定位id
    
    #跳回父级页面
    browser.switch_to.default_content()
    
    

    selenium的API大全


    4.qq空间模拟登陆

    from selenium import webdriver
    import time
    # 实例化浏览器对象
    browser = webdriver.Chrome('./chromedriver.exe')
    # 打开qq空间登陆页面
    browser.get('https://qzone.qq.com/')
    time.sleep(1)
    # 转至frame子页面
    browser.switch_to.frame('login_frame')
    # 获取密码登陆选项并点击
    a_tag = browser.find_element_by_id('switcher_plogin')
    a_tag.click()
    time.sleep(1)
    # 获取账号输入框并输入账号
    browser.find_element_by_id('u').clear()
    user = browser.find_element_by_id('u')
    user.send_keys('3338003899')
    time.sleep(1)
    # 获取密码输入框并输入密码
    browser.find_element_by_id('p').clear()
    pwd = browser.find_element_by_id('p')
    pwd.send_keys('qq123456')
    time.sleep(1)
    # 获取登陆按钮并单击
    button = browser.find_element_by_id('login_button')
    button.click()
    

    5.PhantomJS浏览器使用

    # PhantomJS下载及配置环境变量
    	- 下载, 直接解压
    	- 将解压文件的bin目录添加至环境变量
        
    # PhantomJS无界面浏览器
    from selenium import webdriver
    browser = webdriver.PhantomJS()
    browser.get('https://www.baidu.com')
    with open('baidu_phantomjs.html', 'w', encoding="utf-8") as f:
        f.write(browser.page_source)
    
    # 谷歌无头浏览器
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    browser = webdriver.Chrome(chrome_options=chrome_options)
    browser.get("https://www.baidu.com")
    print(browser.page_source)
    with open('baidu_headerless.html', 'w', encoding='utf-8') as f:
        f.write(browser.page_source)
    

    5.图片懒加载

    import requests
    from lxml import etree
    from urllib import request
    import urllib
    url = 'http://sc.chinaz.com/tupian/index.html'
    headers = {
        "USer-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    res = requests.get(url=url, headers=headers)
    res.encoding = 'utf-8'
    # print(res.text)
    tree = etree.HTML(res.text)
    
    src_list = tree.xpath('//div[contains(@class,"box")]/div/a/img/@src2')
    for url_img in src_list:
        request.urlretrieve(url_img,'%s.jpg'%src_list.index(url_img))
        
    
    
    from selenium import webdriver
    import time
    
    browser = webdriver.Chrome('./chromedriver.exe')
    browser.get('http://image.baidu.com/')
    search = browser.find_element_by_id('kw')
    search.send_keys('安琪拉')
    button = browser.find_element_by_class_name('s_search')
    button.click()
    for i in range(3):
        browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
        time.sleep(5)
    
    text = browser.page_source
    with open('baidu_pic.html', 'w', encoding="utf-8") as f:
        f.write(text)
    
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(open('./baidu_pic.html', 'r', encoding='utf-8'), 'lxml')
    li_list = soup.select('.imgpage ul li')
    for url_img in li_list:
        url_img = url_img['data-objurl']
        print(url_img)
    

    # 雪球网首页, 抓取推荐咨询的每一条标题与详情页链接(使用selenium模拟鼠标向下滑动)
    https://xueqiu.com/
        
        # 实例化浏览器对象:
        from selenium import webdriver
        browser = webdriver.Chrome('driverpath')
    
        # 发送get请求:
        browser.get('url')
    
        # 获取页面元素:
        find_element_by_id
        find_element_by_xpath
        find_element_by_name
        find_element_by_class_name
        find_element_by_css_selector
    
        # 交互操作:
        click(): 点击
        send_keys(): 输入内容
        clear(): 清空操作
        execute_script(js): 执行指定的js代码
        # JS代码: window.scrollTo(0, document.body.scrollHeight)可以模拟鼠标滚动一屏高度
        quit(): 退出浏览器
    
        # 获取网页的数据:
        browser.page_source   --->  str类型
    
    种一棵树最好的时间是十年前,其次是现在
  • 相关阅读:
    测试开发进阶——spring boot——MVC——@RequestMapping 和 @GetMapping 和@PostMapping 区别
    测试开发进阶——spring boot——MVC——请求注解@RequestMapping各个属性值
    测试开发进阶——spring boot——MVC——设置请求方式——参数校验——示例
    测试开发进阶——spring boot——MVC——HttpServletRequest获取请求header、请求cookie、请求入参
    一本通1025
    mysql数据库密码修改
    异常处理总结
    [BZOJ] 书堆
    今天,当中国的老百姓已开始用手机付钱买烤红薯的时候,美国大部分老百姓还在用支票付水电费。这种看似很小的差异让中国拥有了独特的竞争力。我们的城市数据资源的积累将比世界任何一个国家都快,这给我们一个重要的机会,用比发达国家更先进的办法解决城市发展问题。
    微信小程序开发
  • 原文地址:https://www.cnblogs.com/fairytalk/p/13299479.html
Copyright © 2011-2022 走看看