zoukankan      html  css  js  c++  java
  • selenium操作浏览器模块

    selenium模块用途

    selenuim原先多用于测试部门测试,由于它可以操作浏览器,有时候也用于爬虫领域
    优点:操作浏览器访问网站
    缺点:速度较慢

    下载模块

    # 下载模块
    pip3 install selenium
    """selenuim由于需要操作浏览器,所以在下载模块的基础之上还需要下载一个操作浏览器的驱动文件"""
    # 下载驱动
    操作不同的浏览器需要下载不同的驱动,我们统一使用谷歌
    驱动文件可以存放在两个地方
        1.项目的根目录下(不推荐)
        2.将下载好的驱动文件放到python文件夹里面的scripts目录中(推荐)
    http://npm.taobao.org/mirrors/chromedriver/2.35/ 
    if mac系统:
        然后将解压后的chromedriver移动到/usr/local/bin目录下 
       
    注意:selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver 下载链接:https://github.com/mozilla/geckodriver/releases

    基本使用方式

    # 基本使用
    from selenium import webdriver
    import time
    
    # 打开谷歌浏览器
    bro = webdriver.Chrome()
    #其余浏览器
    # bro = webdriver.Firefox()
    # bro = webdriver.Safari()
    # bro = webdriver.Ie()
    # bro = webdriver.Edge()
    # 访问网站
    bro.get('https://www.jd.com')
    time.sleep(5)
    
    # 自动关闭浏览器
    bro.close()  

    自动打开京东或百度搜索定义物品

    from selenium import webdriver
    import time
    # 模拟键盘按键
    from selenium.webdriver.common.keys import Keys
    
    # 打开谷歌浏览器
    bro = webdriver.Chrome()
    # bro = webdriver.Firefox()
    # bro = webdriver.Safari()
    # bro = webdriver.Ie()
    # bro = webdriver.Edge()
    # 访问网站
    bro.get('https://www.baidu.com')
    inputEle = bro.find_element_by_id('kw')
    # inputEle = bro.find_element_by_id('key') # 京东
    inputEle.send_keys("美女")
    inputEle.send_keys(Keys.ENTER)
    
    time.sleep(10)
    bro.close()

     selenuim模块登录百度

    # 1、find_element_by_id   根据id找
    # 2、find_element_by_link_text     根据链接名字找到控件(a标签的文字)
    # aEle = bro.find_element_by_link_text('新闻')
    # print(aEle.text)
    # 3、find_element_by_partial_link_text   根据链接名字找到控件(a标签的文字)模糊查询
    # 4、find_element_by_tag_name       根据标签名
    # 5、find_element_by_class_name     根据类名
    # 6、find_element_by_name           根据属性名
    # 7、find_element_by_css_selector   根据css选择器
    # 8、find_element_by_xpath
      """
      XML:
        用途:1.配置文件
    2.前端页面(类似于HTML)
    odoo框架
    erp 前端界面使用的就是XML
      """
    from selenium import webdriver
    import time
    
    bro=webdriver.Chrome()
    bro.get("https://www.baidu.com")
    bro.implicitly_wait(10)
    
    """
    #d1  等价于 id='d1'
    .c1  等价于 class='c1'
    div p  找div里面所有的p(后代)
    div > p  找div里面第一层级的p(儿子)
    """
    # 利用selenuim模拟百度登录操作
    # 查找到登录的a标签
    aEle = bro.find_element_by_link_text('登录')
    # 点击登录标签
    aEle.click()
    # 查找用户名登录标签
    a1Ele = bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn')
    # 点击
    a1Ele.click()
    # 查找用户名和密码标签输入内容
    usernameEle = bro.find_element_by_id('TANGRAM__PSP_11__userName')
    usernameEle.send_keys('admin123')
    time.sleep(1)
    passwordEle = bro.find_element_by_id('TANGRAM__PSP_11__password')
    passwordEle.send_keys('admin123')
    # 查找登录按钮 点击即可
    btnEle = bro.find_element_by_id('TANGRAM__PSP_11__submit')
    btnEle.click()
    time.sleep(5)
    bro.close()  # 主动关闭页面

     爬取京东商品信息

    # 常用方法
    from selenium import webdriver
    import time
    from selenium.webdriver.common.keys import Keys
    
    bro = webdriver.Chrome()
    bro.get("http://www.jd.com")
    bro.implicitly_wait(10)  # 延时等待
    
    # 查找搜索商品的input框
    inputEle = bro.find_element_by_id('key')
    # 输入商品内容
    inputEle.send_keys('手机')
    # 按下回车确认搜索内容
    inputEle.send_keys(Keys.ENTER)
    # 研究页面商品规律 发现是一个个的li标签 都具有class属性
    goods_li = bro.find_elements_by_class_name('gl-item')
    # 分析每个li里面的数据特征
    for good in goods_li:
        html标签class中p-img下的a标签下的img标签中的src
        img_url = good.find_element_by_css_selector('.p-img a img').get_attribute('src')
        if not img_url:
            img_url = 'https:' + good.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img')
        url = good.find_element_by_css_selector('.p-img a').get_attribute('href')
        price = good.find_element_by_css_selector('.p-price i').text
        name = good.find_element_by_css_selector('.p-name em').text.replace('
    ', '')
        commit = good.find_element_by_css_selector('.p-commit a').text
        print('''
              商品链接:%s
              商品图片:%s
              商品名字:%s
              商品价格:%s
              商品评论数:%s
              ''' % (url, img_url, name, price, commit))
    time.sleep(5)
    #主动关闭链接
    bro.close()
    from selenium import webdriver
    import time
    from selenium.webdriver.common.keys import Keys
    
    bro = webdriver.Chrome()
    bro.get("https://www.jd.com")
    # WebElement延时等待
    bro.implicitly_wait(10)
    
    # 分析每个li里面的数据特征
    def get_goods(bro):
        print("---------------------------------------")
        # 研究页面商品规律 发现是一个个的li标签 都具有class属性
        goods_li = bro.find_elements_by_class_name('gl-item')
        # html标签class中p-img下的a标签下的img标签中的src
        for good in goods_li:
            img_url = good.find_element_by_css_selector('.p-img a img').get_attribute('src')
            if not img_url:
                img_url = 'https:' + good.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img')
            url = good.find_element_by_css_selector('.p-img a').get_attribute('href')
            price = good.find_element_by_css_selector('.p-price i').text
            name = good.find_element_by_css_selector('.p-name em').text.replace('
    ', '')
            commit = good.find_element_by_css_selector('.p-commit a').text
            print('''
                商品链接:%s
                商品图片:%s
                商品名字:%s
                商品价格:%s
                商品评论数:%s
                ''' % (url, img_url, name, price, commit))
    
            next_page = bro.find_element_by_partial_link_text("下一页")
            time.sleep(1)
            next_page.click()
            time.sleep(1)
            get_goods(bro)
    
    input_search = bro.find_element_by_id("key")
    input_search.send_keys("手机")
    input_search.send_keys(Keys.ENTER)
    # 进入另外一个页面
    try:
        get_goods(bro)
    except Exception as e:
        print("结束")
    finally:
        bro.close()
    
    # time.sleep(5)
    # #主动关闭链接
    # bro.close()
    京东翻页代码
  • 相关阅读:
    Hibernate面试题
    HBuilder开发移动App——manifest.json文件解析
    HTML5+ App开发入门
    Hbuilder开发移动App(1)
    Spring源码 之环境搭建
    java 反射机制
    【LeetCode】Divide Two Integers
    【LeetCode】4Sum
    Java ArrayList、Vector和LinkedList等的差别与用法(转)
    关于Python元祖,列表,字典,集合的比较
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/14272424.html
Copyright © 2011-2022 走看看