selenium 订阅
硒是一种化学元素,化学符号是Se,在化学元素周期表中位于第四周期VI A族(第34号元素),是一种非金属。可以用作光敏材料、电解锰行业催化剂、动物体必需的营养元素和植物有益的营养元素等。硒在自然界的存在方式分为两种:无机硒和植物活性硒。无机硒一般指亚硒酸钠和硒酸钠,从金属矿藏的副产品中获得;后者是硒通过生物转化与氨基酸结合而成,一般以硒蛋氨酸的形式存在。 展开全文
硒是一种化学元素,化学符号是Se,在化学元素周期表中位于第四周期VI A族(第34号元素),是一种非金属。可以用作光敏材料、电解锰行业催化剂、动物体必需的营养元素和植物有益的营养元素等。硒在自然界的存在方式分为两种:无机硒和植物活性硒。无机硒一般指亚硒酸钠和硒酸钠,从金属矿藏的副产品中获得;后者是硒通过生物转化与氨基酸结合而成,一般以硒蛋氨酸的形式存在。
信息
分子量
78.96
密    度
4.81g/cm³
化学式
Se
血清正常硒
15~25(微克)/dl
英文名
selenium
CAS登录号
7782-49-2
熔    点
221℃
中文名
正常人尿硒
0.01~0.15mg/L
水溶性
不溶于水、醇,溶于硫酸、硝酸、碱
沸    点
684.9℃
外    观
灰色带金属光泽的固体
硒历史发展
发现人永斯·雅各布·贝采利乌斯(Jöns Jakob Berzelius),并把它命名为Selene,希腊语,月亮的意思。发现年份:1817年发现过程:1817年,瑞典的贝采利乌斯从硫酸厂的铅室底部的红色粉状物物质中制得硒。他还发现到硒的同素异形体。他还原硒的氧化物,得到橙色无定形硒;缓慢冷却熔融的硒,得到灰色晶体硒;在空气中让硒化物自然分解,得到黑色晶体硒。硒是一种多功能的生命营养素,常常用于肿瘤癌症克山病大骨节病、心血管病、糖尿病、肝病、前列腺病、心脏病、癌症等40多种疾病,广泛运用于癌症、手术、放化疗等。硒又分为植物活性硒和无机硒两种,无机硒一般指亚硒酸钠和硒酸钠,包括有大量无机硒残留的酵母硒、麦芽硒,从金属矿藏的副产品中获得,无机硒有较大的毒性,且不易被吸收,不适合人和动物使用。植物活性硒通过生物转化与氨基酸结合而成,一般以硒蛋氨酸的形式存在,植物活性硒是人类和动物允许使用的硒源。植物活性硒的科技水平主要看人体的吸收利用率,从这点上看:中国自主研发的硒比国外的硒更适合人体吸收。
收起全文
精华内容
下载资源
问答
  • scrapy结合selenium解析动态页面

    万次阅读 多人点赞 2020-07-20 21:52:24
    scrapy解决动态页面的一个解决办法,scrapy结合selenium解析动态页面

    scrapy结合selenium解析动态页面

    1. 问题

    虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难;

    比如你信心满满的写好了一个爬虫,写好了目标内容的选择器,一跑起来发现根本找不到这个元素,当时肯定一万个黑人问号

    于是你在浏览器里打开F12,一顿操作,发现原来这你妹的是ajax加载的,不然就是硬编码在js代码里的,blabla的…

    然后你得去调ajax的接口,然后解析json啊,转成python字典啊,然后才能拿到你想要的东西

    妹的就不能对我们这些小爬爬友好一点吗?

    于是大家伙肯定想过,“为啥不能浏览器看到是咋样的html页面,我们爬虫得到的也是同样的html页面呢? 要是可以,那得多么美滋滋啊”

    2. 解决方案

    既然是想要得到和浏览器一模一样的html页面,那我们就先用浏览器渲染一波目标网页,然后再将浏览器渲染后的html拿给scrapy进行进一步解析不就好了吗

    2.1 获取浏览器渲染后的html

    有了思路,肯定是网上搜一波然后开干啊,搜python操作浏览器的库啊

    货比三家之后,找到了selenium这货

    selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

    卧槽,这就是我们要的东西啦

    先试一波看看效果如何,目标网址http://quotes.toscrape.com/js/

    别着急,先来看一下网页源码


    我们想要的div.quote被硬编码在js代码中

    用selenium试一下看能不能获取到浏览器渲染后的html

    from selenium import webdriver
    
    # 控制火狐浏览器
    browser = webdriver.Firefox()
    
    # 访问我们的目标网址
    browser.get("http://quotes.toscrape.com/js/")
    
    # 获取渲染后的html页面
    html = browser.page_source
    

    perfect,到这里我们已经顺利拿到浏览器渲染后的html了,selenium大法好啊?

    2.2 通过下载器中间件返回渲染过后html的Response

    这里先放一张scrapy的流程图

    在这里插入图片描述

    所以我们只需要在scrapy下载网页(downloader下载好网页,构造Response返回)之前,通过下载器中间件返回我们自己<通过渲染后html构造的Response>不就可以了吗?

    道理我都懂,关键是在哪一步使用浏览器呢?

    分析:
    (1)我们的scrapy可能是有很多个爬虫的,有些爬虫处理的是纯纯的静态页面,而有些是处理的纯纯的动态页面,又有些是动静态结合的页面(有可能列表页是静态的,正文页是动态的),如果把<浏览器调用代码>放在下载器中间件中,那么除非特别区分哪些爬虫需要selenium,否则每一个爬虫都用selenium去下载解析页面的话,实在是太浪费资源了,就相当于杀鸡用牛刀了,所以得出结论,<浏览器调用代码>应该是放置于Spider类中更好一点;

    (2)如果放置于Spider类中,就意味着一个爬虫占用一个浏览器的一个tab页,如果这个爬虫里的某些Request需要selenium,而某些不需要呢? 所以我们还要在区分一下Request;

    结论:

    1. SeleniumDownloaderMiddleware(selenium专用下载器中间件):负责返回浏览器渲染后的Response
    2. SeleniumSpider(selenium专用Spider):一个spider开一个浏览器
    3. SeleniumRequest:只是继承一下scrapy.Request,然后pass,好区分哪些Request需要启用selenium进行解析页面,相当于改个名

    3. 撸代码,盘他

    3.1 自定义Request

    #!usr/bin/env python  
    # -*- coding:utf-8 _*-
    """ 
    @author:Joshua
    @description:
        只是继承一下scrapy.Request,然后pass,好区分哪些Request需要启用selenium进行解析页面,相当于改个名
    """
    import scrapy
    
    class SeleniumRequest(scrapy.Request):
        """
        selenium专用Request类
        """
        pass
    

    3.2 自定义Spider

    #!usr/bin/env python  
    # -*- coding:utf-8 _*-
    """ 
    @author:Joshua 
    @description:
        一个spider开一个浏览器
    """
    import logging
    import scrapy
    from selenium import webdriver
    
    
    class SeleniumSpider(scrapy.Spider):
        """
        Selenium专用spider
    
        一个spider开一个浏览器
    
        浏览器驱动下载地址:http://www.cnblogs.com/qiezizi/p/8632058.html
        """
        # 浏览器是否设置无头模式,仅测试时可以为False
        SetHeadless = True
    
        # 是否允许浏览器使用cookies
        EnableBrowserCookies = True
    
        def __init__(self, *args, **kwargs):
            super(SeleniumSpider, self).__init__(*args, **kwargs)
            
            # 获取浏览器操控权
            self.browser = self._get_browser()
    
        def _get_browser(self):
            """
            返回浏览器实例
            """
            # 设置selenium与urllib3的logger的日志等级为ERROR
            # 如果不加这一步,运行爬虫过程中将会产生一大堆无用输出
            logging.getLogger('selenium').setLevel('ERROR')
            logging.getLogger('urllib3').setLevel('ERROR')
            
            # selenium已经放弃了PhantomJS,开始支持firefox与chrome的无头模式
            return self._use_firefox()
    
        def _use_firefox(self):
            """
            使用selenium操作火狐浏览器
            """
            profile = webdriver.FirefoxProfile()
            options = webdriver.FirefoxOptions()
            
            # 下面一系列禁用操作是为了减少selenium的资源耗用,加速scrapy
            
            # 禁用图片
            profile.set_preference('permissions.default.image', 2)
            profile.set_preference('browser.migration.version', 9001)
            # 禁用css
            profile.set_preference('permissions.default.stylesheet', 2)
            # 禁用flash
            profile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')
            
            # 如果EnableBrowserCookies的值设为False,那么禁用cookies
            if hasattr(self, "EnableBrowserCookies") and self.EnableBrowserCookies:
                # •值1 - 阻止所有第三方cookie。
                # •值2 - 阻止所有cookie。
                # •值3 - 阻止来自未访问网站的cookie。
                # •值4 - 新的Cookie Jar策略(阻止对跟踪器的存储访问)
                profile.set_preference("network.cookie.cookieBehavior", 2)
            
            # 默认是无头模式,意思是浏览器将会在后台运行,也是为了加速scrapy
            # 我们可不想跑着爬虫时,旁边还显示着浏览器访问的页面
            # 调试的时候可以把SetHeadless设为False,看一下跑着爬虫时候,浏览器在干什么
            if self.SetHeadless:
                # 无头模式,无UI
                options.add_argument('-headless')
    
            # 禁用gpu加速
            options.add_argument('--disable-gpu')
    
            return webdriver.Firefox(firefox_profile=profile, options=options)
    
        def selenium_func(self, request):
            """
            在返回浏览器渲染的html前做一些事情
                1.比如等待浏览器页面中的某个元素出现后,再返回渲染后的html;
                2.比如将页面切换进iframe中的页面;
            
            在需要使用的子类中要重写该方法,并利用self.browser操作浏览器
            """
            pass
    
        def closed(self, reason):
            # 在爬虫关闭后,关闭浏览器的所有tab页,并关闭浏览器
            self.browser.quit()
            
            # 日志记录一下
            self.logger.info("selenium已关闭浏览器...")
    
    

    之所以不把获取浏览器的具体代码写在__init__方法里,是因为笔者之前写的代码里考虑过

    1. 两种浏览器的调用(支持firefox与chrome),虽然后来感觉还是firefox比较方便,因为所有版本的火狐浏览器的驱动都是一样的,但是谷歌浏览器是不同版本的浏览器必须用不同版本的驱动(坑爹啊- -’’)
    2. 自动区分不同的操作系统并选择对应操作系统的浏览器驱动

    额… 所以上面spider的代码是精简过的版本

    备注: 针对selenium做了一系列的优化加速,启用了无头模式,禁用了css、flash、图片、gpu加速等… 因为爬虫嘛,肯定是跑的越快越好啦?

    3.3 自定义下载器中间件

    #!usr/bin/env python  
    # -*- coding:utf-8 _*-
    """ 
    @author:Joshua 
    @description:
        负责返回浏览器渲染后的Response
    """
    import hashlib
    import time
    from scrapy.http import HtmlResponse
    from twisted.internet import defer, threads
    from tender_scrapy.extendsion.selenium.spider import SeleniumSpider
    from tender_scrapy.extendsion.selenium.requests import SeleniumRequest
    
    
    class SeleniumDownloaderMiddleware(object):
        """
        Selenium下载器中间件
        """
        
        def process_request(self, request, spider):
            # 如果spider为SeleniumSpider的实例,并且request为SeleniumRequest的实例
            # 那么该Request就认定为需要启用selenium来进行渲染html
            if isinstance(spider, SeleniumSpider) and isinstance(request, SeleniumRequest):
                # 控制浏览器打开目标链接
                browser.get(request.url)
                
                # 在构造渲染后的HtmlResponse之前,做一些事情
                #1.比如等待浏览器页面中的某个元素出现后,再返回渲染后的html;
                #2.比如将页面切换进iframe中的页面;
                spider.selenium_func(request)
                
                # 获取浏览器渲染后的html
                html = browser.page_source
                
                # 构造Response
                # 这个Response将会被你的爬虫进一步处理
                return HtmlResponse(url=browser.current_url, request=request, body=html.encode(), encoding="utf-8")
    

    这里要说一下下载器中间件的process_request方法,当每个request通过下载中间件时,该方法被调用。

    1. process_request() 必须返回其中之一: 返回 None 、返回一个 Response 对象、返回一个 Request 对象或raise IgnoreRequest 。
    2. 如果其返回 Response 对象,Scrapy将不会调用 任何 其他的 process_request() 或 process_exception() 方法,或相应地下载函数; 其将返回该response。 已安装的中间件的 process_response() 方法则会在每个response返回时被调用。

    更详细的关于下载器中间件的资料 -> https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/downloader-middleware.html#id2

    3.4 额外的工具

    眼尖的读者可能注意到SeleniumSpider类里有个selenium_func方法,并且在SeleniumDownloaderMiddleware的process_request方法返回Resposne之前调用了spider的selenium_func方法

    这样做的好处是,我们可以在构造渲染后的HtmlResponse之前,做一些事情(比如…那种…很骚的那种…你懂的)

    1. 比如等待浏览器页面中的某个元素出现后,再返回渲染后的html;
    2. 比如将页面切换进iframe中的页面,然后返回iframe里面的html(够骚吗);

    等待某个元素出现,然后再返回渲染后的html这种操作很常见的,比如你访问一篇文章,它的正文是ajax加载然后js添加到html里的,ajax是需要时间的,但是selenium并不会等待所有请求都完毕后再返回

    解决方法:

    1. 您可以通过browser.implicitly_wait(30),来强制selenium等待30秒(无论元素是否加载出来,都必须等待30秒)
    2. 可以通过等待,直到某个元素出现,然后再返回html

    所以笔者对<等待某个元素出现>这一功能做了进一步的封装,代码如下

    #!usr/bin/env python  
    # -*- coding:utf-8 _*-
    """ 
    @author:Joshua 
    @description:
    """
    import functools
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    
    def waitFor(browser, select_arg, select_method, timeout=2):
        """
        阻塞等待某个元素的出现直到timeout结束
    
        :param browser:浏览器实例
        :param select_method:所使用的选择器方法
        :param select_arg:选择器参数
        :param timeout:超时时间
        :return:
        """
        element = WebDriverWait(browser, timeout).until(
            EC.presence_of_element_located((select_method, select_arg))
        )
    
    
    # 用xpath选择器等待元素
    waitForXpath = functools.partial(waitFor, select_method=By.XPATH)
    
    # 用css选择器等待元素
    waitForCss = functools.partial(waitFor, select_method=By.CSS_SELECTOR)
    

    waitForXpath与waitForCss 是waitFor函数的两个偏函数,意思这两个偏函数是设置了select_method参数默认值的waitFor函数,分别应用不同的选择器来定位元素

    4. 中间件当然要在settings中激活一下

    在这里插入图片描述

    在我们scrapy项目的settings文件中的DOWNLOADER_MIDDLEWARES字典中添加到适当的位置即可

    5. 使用示例

    5.1一个完整的爬虫示例

    # -*- coding: utf-8 -*-
    """
    @author:Joshua
    @description:
        整合selenium的爬虫示例
    """
    import scrapy
    from my_project.requests import SeleniumRequest
    from my_project.spider import SeleniumSpider
    from my_project.tools import waitForXpath
    
    
    # 这个爬虫类继承了SeleniumSpider
    # 在爬虫跑起来的时候,将启动一个浏览器
    class SeleniumExampleSpider(SeleniumSpider):
        """
        这一网站,他的列表页是静态的,但是内容页是动态的
        所以,用selenium试一下,目标是扣出内容页的#content
        """
        name = 'selenium_example'
        allowed_domains = ['pingdingshan.hngp.gov.cn']
        url_format = 'http://pingdingshan.hngp.gov.cn/pingdingshan/ggcx?appCode=H65&channelCode=0301&bz=0&pageSize=20&pageNo={page_num}'
    
        def start_requests(self):
            """
            开始发起请求,记录页码
            """
            start_url = self.url_format.format(page_num=1)
            meta = dict(page_num=1)
            # 列表页是静态的,所以不需要启用selenium,用普通的scrapy.Request就可以了
            yield scrapy.Request(start_url, meta=meta, callback=self.parse)
    
        def parse(self, response):
            """
            从列表页解析出正文的url
            """
            meta = response.meta
            all_li = response.css("div.List2>ul>li")
    
            # 列表
            for li in all_li:
                content_href = li.xpath('./a/@href').extract()
                content_url = response.urljoin(content_href)
                # 内容页是动态的,#content是ajax动态加载的,所以启用一波selenium
                yield SeleniumRequest(url=content_url, meta=meta, callback=self.parse_content)
    
            # 翻页
            meta['page_num'] += 1
            next_url = self.url_format.format(page_num=meta['page_num'])
            # 列表页是静态的,所以不需要启用selenium,用普通的scrapy.Request就可以了
            yield scrapy.Request(url=next_url, meta=meta, callback=self.parse)
    
        def parse_content(self, response):
            """
            解析正文内容
            """
            content = response.css('#content').extract_first()
            yield dict(content=content)
          
        def selenium_func(self, request):
            # 这个方法会在我们的下载器中间件返回Response之前被调用
            
            # 等待content内容加载成功后,再继续
            # 这样的话,我们就能在parse_content方法里应用选择器扣出#content了
            waitForXpath(self.browser, "//*[@id='content']/*[1]")
    
    

    5.2 更骚一点的操作…

    假如内容页的目标信息处于iframe中,我们可以将窗口切换进目标iframe里面,然后返回iframe的html

    要实现这样的操作,只需要重写一下SeleniumSpider子类中的selenium_func方法

    要注意到SeleniumSpider中的selenium_func其实是啥也没做的,一个pass,所有的功能都在子类中重写

    def selenium_func(self, request):
        # 找到id为myPanel的iframe
        target = self.browser.find_element_by_xpath("//iframe[@id='myPanel']")
        # 将浏览器的窗口切换进该iframe中
        # 那么切换后的self.browser的page_source将会是iframe的html
        self.browser.switch_to.frame(target)
    

    6. selenium的一些替代(一些解决动态页面别的方法)

    1. scrapy官方推荐的scrapy_splash
      • 优点
        • 是异步的
        • 可以将部署scrapy的服务器与部署splash的服务器分离开
        • 留给读者遐想的空间
      • 本人觉得的缺点
        • 喂喂,lua脚本很麻烦好吗…(大牛请别打我)
    2. 最新的异步pyppeteer操控浏览器
      • 优点
        • 调用浏览器是异步的,操控的单位是tab页,速度更快
        • 留给读者遐想的空间
      • 本人觉得的缺点
        • 因为pyppeteer是python版puppeteer,所以puppeteer的一些毛病,pyppeteer无可避免的完美继承
        • 笔者试过将pyppeteer整合至scrapy中,在异步中,scrapy跑起来爬虫,总会偶尔timeout之类的…

    anyway,上面两个都是不错的替代,有兴趣的读者可以试一波

    7. scrapy整合selenium的一些缺点

    1. selenium是阻塞的,所以速度会慢些
    2. 对于一些稍微简单的动态页面,最好还是自己去解析一下接口,不要太过依赖selenium,因为selenium带来便利的同时,是更多资源的占用
    3. 整合selenium的scrapy项目不宜大规模的爬取,比如你在自己的机子上写好了一个一个的爬虫,跑起来也没毛病,速度也能接受,然后你很开心地在服务器上部署了你项目上的100+个爬虫(里面有50%左右的爬虫启用了selenium),当他们跑起来的时候,服务器就原地爆炸了… 为啥? 因为相当于服务器同时开了50多个浏览器在跑,内存顶不住啊(土豪忽略…)
    展开全文
  • Selenium

    千次阅读 多人点赞 2018-02-26 18:07:28
    Selenium     1、Python selenium —— 一定要会用selenium的等待,三种等待方式解读 2、专栏:Python Selenium自动化测试详解 3、通过selenium启动firefox时,启动插件和证书 4、判断元素是否显示、被使用、...
    展开全文
  • Python自动化测试之Selenium

    万人学习 2019-08-07 15:57:44
    本课程详细介绍了Selenium Python版本的自动化测试方法和实践,通过本课程的学习你将掌握如下内容:Selenium 测试环境搭建单元测试、生成测试报告、定位元素、WebDriver属性和方法、WebElement属性和方法、操作form...
  • selenium

    千次阅读 2012-02-03 16:56:38
    Part One --- Selenium IDE  Selenium IDE 是selenium测试工具中的其中一个,是一个基于FireFox的Web测试开发环境,可以录制、编辑和调试测试。Selenium IDE包含了Selenium Core,因此可以轻易地在...
    Part One --- Selenium IDE


        Selenium IDE 是selenium测试工具中的其中一个,是一个基于FireFox的Web测试开发环境,可以录制、编辑和调试测试。Selenium IDE包含了Selenium Core,因此可以轻易地在浏览器中录制和回放测试。
      Selenium IDE不仅仅是一个测试录制工具,而是一个IDE,可以录制测试,也可以手工编辑测试,可设置断点进行调试,可把测试保存到HTML、Ruby、C#、Java其他脚本格式,然后使用Selenium RC来实现并运行更加灵活和强大的测试。
       Selenium IDE是一个firfox插件,录制相当方便,而且效果不错,很多录制后不需要修改即可回放.编辑也相当简单,一行就是一个完整的命令.十分适合于编程基 础较薄的测试人员使用.但是由于所用的语言是selenese即是类html脚本语言而非程式语言,于组织脚本不够灵活,所形成的功能不如 selenium RC 强大,而且对脚本组织也不方便.更重要的是暂时只支持 firefox浏览器.所以一般情况下是以selenium IDE 来熟悉 selenium功具.然后利用IDE 来录制脚本作为selenium core的脚本文件或更多的是用IDE录制而保存为drive脚本即是程式语言脚本如java 脚本.但无论如何 selenium IDE是学习selenium的必修课,因为日后录制脚本需要它,即使用selenium rc也可用它录制部分脚本并可方便用于调试.下面将简单介绍Selenium IDE的整个使用过程.
        1> Selenium IDE 安装. 从其官方网站下载安装:http://selenium-ide.openqa.org/,跟普通frifox 插件安装没有什么两样(注意是firefox安装插件不是IE哦..).安装完成后,在浏览器"工具"菜单栏即可见Selenium IDE 工具.
        2>Selenium IDE录制脚本.安装完成后当然是开始录制脚本了.打开IDE工具后,类似一个小浏览器(此时默认是录制状态),在Base URL 中输入你要录制的网站网址如www.google.com.然后在Firefox 中打开google 网站,输入"Selenium ide",再点击搜索.然后点击IDE工具的停止录制按钮停止录制.此时你会发现在"Table"中有了一些命令行,每一有三个部分组成.   command:命令如单击click, Target:目标即是命令的对象如单击按钮(用xpath或是其它定位方法表示),Value即是值如向输入框输入东西即在这里设置.而在"Sourse"中可看到类似html 的脚本,保存后就这样了,呵呵.
        3> Selenium IDE编辑脚本.你可以在Table中修改,点击相应命令行,所在行内部便会出现在下方,即可方便修改,如选择相应的command.当然你也可以在 Sourece中修改,但人必须对 Selenium命令很熟悉. 现在修改下刚才录制的脚本,将第二行命令的value 修改为Selenium.
        4>Selenium IDE脚本运行. 修改完后即可点击运行按钮运行.运行刚才修改过的脚本,你会发现其迅速打开google浏览器并输入"Selenium"并点击进行搜索.此时运行结束.
        5>Selenium IDE脚本保存.保存时可保存为html脚本或是其它程式语言脚本,初步学习还是保存为html脚本吧.
        6>打开 seleniumIDE脚本并运行.这个就非常简单了....
        到此,Selenium IDE录制并修改运行整个过程完成了,你已经可以轻松方便使用selenium IDE进行录制运行脚本了.但是要运用到测试中去尚需要时间熟悉,如都有什么命令啊,如何进行定位啊,如何用assert来验证验证点啊,这也是 selenium 测试主要学习的三点.如果这三占都搞明白了,熟悉了,恭喜你,你已经可以用selenium进行测试了.
        作为使用selenium IDE 工具并不复杂,而在于如何更熟悉它并用于测试中去.况且如前面提到只用Selenium IDE 进行测试局限性太高,所以建议借学习selenium IDE 了解并熟悉selenium工具,然后用其录制脚本并用 selenium 其它工具进行测试如selenium Core, selenium RC,selenium Grid.于本人使用经验而言,建议使用selenium RC.当然并不是说其它不好,其它有自己的优势或是功能也是RC不具备的.从学习与使用方面考虑是先学习 selenium IDE, 然后转向Selenium RC. 所以接下来将介绍Selenium RC.





    Part Two --- Selenium Introduction 1

    其实几天前就看了一下Selenium,不过因为之前写别的东西,就拖到了今天。 Selenium包括三部分,Selenium core,Selenium IDE和Selenium RC。Selenium core自然就是他的核心代码,Selenium IDE是用JavaScript写成的Firefox插件,可以录制脚本,转换成其他语言,并且回放等。但是喵喵在这里主要想说的是Selenium RC,即Selenium Remote Control,以及它和ant的集成使用。

    Selenium Remote Control现在最新的是0.9.2,可以在http://www.openqa.org/selenium-rc/下 载。Selenium Remote Control可以允许你使用编程语言(Java, .NET, Perl, Python, and Ruby)实现自动化web应用UI的测试,它提供了一个Selenium Server,它可以自动的start/stop/control所有支持的浏览器(Windows平台上为Internet Explorer 6.0 and 7.0, Firefox 1.5.0.8 and 2.0, Opera 8.5.4 and 9.0.2)。

    Selenium Server必须跑在JRE1.5以上版本,可以通过java -version查看当前的JRE版本。

    启动Selenium Server:java -jar selenium-server.jar

    可以通过-interactive参数使之以interactive mode启动,当然,在此喵喵不采用这种方式,而是用java编写testcase来进行测试。

    代码如下:

    import com.thoughtworks.selenium.*;
    import junit.framework.*;
    public class GoogleTest extends TestCase {
        private Selenium browser;
        public void setUp() {
            browser = new DefaultSelenium("localhost",
                4444, "*firefox", http://www.google.com);
            browser.start();
        }
        public void testGoogle() {
            browser.open(http://www.google.com/webhp?hl=en);
            browser.type("q", "hello world");
            browser.click("btnG");
            browser.waitForPageToLoad("5000");
            assertEquals("hello world - Google Search", browser.getTitle());
        }
        public void tearDown() {
            browser.stop();
        }
    }

    启 动Selenium Server以后,就可以运行上面的testcase了。相信大家也都看到了,这个testcase是继承了junit的testcase。所以下面要讲 的用ant进行自动化的编译和测试就和前面的ant学习笔记(一)中提到的<junit>task完全一样了。

    ant脚本片段如下:

    <!--  编译selenium test文件 -->
    <target name="compileselenium">
        <mkdir dir="${dist.selenium}"/>
        <javac destdir="${dist.selenium}" deprecation="on">
            <src path="${src.selenium}"/>
            <classpath refid="classpath"/>
            <classpath refid="proj.libs"/>
        </javac>       
    </target>
    <!--  运行selenium  -->
    <target name="selenium" depends="compileselenium">
        <junit printsummary="yes" haltonfailure="yes">
            <classpath>
                <path refid="classpath"/>
                <pathelement location="${dist.selenium}"/>
            </classpath>
            <formatter type="plain"/>
            <test name="GoogleTest" haltonfailure="no" outfile="result"/ >
        </junit>
    </target>



    Part Three -- Selenium学习笔记

    最近准备用Selenium自动化录制测试脚本,稍微总结一下。
    Selenium的主页是http://seleniumhq.org
    Selenium包括很多组件,其中我现在用的是Selenium RC和Selenium IDE。Selenium IDE是Firefox的一个插件,我们可以使用它录制页面操作。
    Selenium IDE安装完毕之后,可以从工具菜单中激活,然后我们就可以在firefox中访问需要测试的网页,进行各种页面操作,Selenium IDE在这个过程中会记录我们的页面控件和动作。完成录制之后,Selenium IDE生成一个HTML文件保存脚本,比如

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head profile="http://selenium-ide.openqa.org/profiles/test-case">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="selenium.base" href="http://www.baidu.com/" />
    <title>baidu</title>
    </head>
    <body>
    <table cellpadding="1" cellspacing="1" border="1">
    <thead>
    <tr><td rowspan="1" colspan="3">baidu</td></tr>
    </thead><tbody>
    <tr>
            <td>open</td>
            <td>/</td>
            <td></td>
    </tr>
    <tr>
            <td>type</td>
            <td>kw</td>
            <td>ckword</td>
    </tr>
    <tr>
            <td>clickAndWait</td>
            <td>sb</td>
            <td></td>
    </tr>
    </tbody></table>
    </body>
    </html>

    我们可以导出成Java文件,比如:

    package com.example.tests;

    import com.thoughtworks.selenium.*;
    import java.util.regex.Pattern;

    public class NewTest extends SeleneseTestCase {
            public void setUp() throws Exception {
                    setUp("http://www.baidu.com/", "*chrome");
            }
            public void testNew() throws Exception {
                    selenium.open("/");
                    selenium.type("kw", "ckword");
                    selenium.click("sb");
                    selenium.waitForPageToLoad("30000");
            }
    }

    只要导入相应的selenium和Junit包就可运行。
    有一点需要注意的是在回放脚本时,应该添加setSpeed方法,参数是ms,因为Selenium IDE虽然可以选择回放速度(慢——中——快),但实际上即使选择慢速,Selenium IDE仍然运行的有些快,导致其在顺序执行用户操作时,可以发生没等到页面加载完毕就执行下一个命令的现象,导致下一个命令找不到响应的页面控件。除了 setSpeed之外,Selenium IDE还可以添加大量的命令。具体见Selenium IDE界面。
    另外一个关键是如何识别页面控件。自动化的核心是录制的控件识别方法可以复用,Selenium IDE支持的识别格式包括ID、Name、XPath:attributes、DOM index和XPath : position,而且允许正则表达式,所以非常灵活,根据我使用的情况来看,对于富客户端应用,控件ID通常都增加了一个随机数,不适合做识 别,Name还不错,但是如何这个控件Name带有版本信息,比如控件在不断升级,从1.3升到1.4,那么Name可以会失效,要小心。XPath: position我用的最多,也觉得定位最准。但是Selenium IDE有时抓不到某些操作,比如,可以某一个Logout链接,是由span来实现的,此时Selenium IDE抓不到,此时可以XPath:attributes识别,这样写://span[text()='Log out'],搞定。
    对于Selenium IDE,还有很多细节需要学习,比如正则表达式的应用,如何写出通用的识别方法,等等。我准备使用Selenium IDE录制脚本,然后导出成java文件,做一些修改之后用Selenium RC驱动。

    原文 http://www.ckword.com/blog/?p=36

    Part Four --- About Selenium

    优势:

    1. 记录测试过程中,所见 即是所得,selenium 的所有内部程序都是用Javascipt编写的。

    [Javascrīpt: 由Netscape Communications 和Sun Micorsystems公司共同开发的一种描述语言,与Java 的关系比较松散。Javascrīpt 能为Web页添加基本的联机应用程序和功能,但它不是一种真正的面向对象语言。

    它的工作特点是,当client端发出一个JS的请求时,它不必从web server下载,而直接由浏览器做出响应。]

    2. 支持多种操作系统,如windows, Mac, Linux,也支持多种浏览器,如IE,Firefox, Mozilla.

    若使用Selenium IDE进行web 自动记录测试用例录制,只能是在Firefox (笔者还没试过Mozilla,嘿嘿)是先录制好脚本,再在其它浏览器执行测试用例,进行测试。

    3. 执行两种开发脚本,test runner,需要安装Selenium Core,执行的文件为.HTML后缀名。另一种是driven(脚本语言编写),支持多种语言:JAVA,.NET, Perl, Python, Ruby.(在下用的是ruby, 没办法,谁叫它既简洁又明了呢!^ ^)

    劣势:

    较难处理逻辑关系强的业务测试。

    Selenium 实质:

      通过HTTP协议,发送请求来完成测试用例的。

    Selenium 命令只有两种

    1. 操作(action):用于模拟用户与web的交互。

    2. 断言(assertion):验证一个命令的预期结果。(类似于watir^ ^)

    Selenium 的组成:

    Selenium IDE:firefox 的 plug-in。 是浏览器的工具,不能安装在IE上。

    Selenium Core:纯粹由Javascrīpt组成的,有assertion机制的test suit runnner.

    Selenium Remote Control:

    一个代理与控制端, 可代替Selenium core 和IDE 的client端。

    下载地址:http://www.openqa.org/

    一个使用Selenium IDE的测试例子脚本:

    class NewTest
      def test_foo
        open "/intl/zh-CN/"
        assertTitle "Google"
        type "q", "selenium"
        clickAndWait "btnG"
        assertTitle "selenium - Google 搜索"
        clickAndWait "link=高级搜索"
        assertTitle "Google 高级搜索"
        type "as_epq", "iccer"
        select "lr", "label=简体中文"
        clickAndWait "btnG"
        assertTitle "selenium "iccer" - Google 搜索"
        click "link=测试| 软件测试| 软件缺陷跟踪| 软件配置工具| 测试用例设计| Web测试 ..."
      end
    end

    将脚本拷下,存为.HTML文档,再在firefox的selenium IDE工作中打开,执行就OK了。(执行不了就多试几次吧。^ ^)

    迟点要添加用selenium core的例子。


    Part Five -- Selenium RC测试案例

        《Selenium简介》 中讲过,Selenium RC支持多种语言编写测试案例,如:C#,Python。在工作中,我倾向于是用Python这类动态语言编写测试案例,因为这样的测试案例无需编 译:>,试想如果你有1000个测试案例,每个都要编译,那会给编译服务器很大的压力,而且案例修改后,还得重新编译才能运行:<。但在本系 列的文章中,我还是打算使用C#编写示范例子。

    Selenium RC下载:http://seleniumhq.org/download/

    写Selenium RC的测试案例

         上一篇《Selenium IDE的使用》中,提到了Selenium IDE可以把录制的脚本转为其他语言的脚本,所以我继续用上一篇的脚本为例子,下面是把脚本语言转换为C#后的代码:

    using System;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading;
    using NUnit.Framework;
    using Selenium;

    namespace SeleniumTests
    {
        [TestFixture]
        
    public class NewTest
        {
            
    private ISelenium selenium;
            
    private StringBuilder verificationErrors;
            
            [SetUp]
            
    public void SetupTest()
            {
                selenium 
    = new DefaultSelenium("localhost"4444"*chrome""http://change-this-to-the-site-you-are-testing/");
                selenium.Start();
                verificationErrors 
    = new StringBuilder();
            }
            
            [TearDown]
            
    public void TeardownTest()
            {
                
    try
                {
                    selenium.Stop();
                }
                
    catch (Exception)
                {
                    
    // Ignore errors if unable to close the browser
                }
                Assert.AreEqual(
    "", verificationErrors.ToString());
            }
            
            [Test]
            
    public void TheNewTest()
            {
                selenium.Open(
    "/");
                selenium.Type(
    "kw""hyddd");
                selenium.Click(
    "sb");
                selenium.WaitForPageToLoad(
    "30000");
                
    try
                {
                    Assert.IsTrue(selenium.IsTextPresent(
    "hyddd - 博客园"));
                }
                
    catch (AssertionException e)
                {
                    verificationErrors.Append(e.Message);
                }
                selenium.Click(
    "//table[@id='1']/tbody/tr/td/a/font");
            }
        }
    }

    在这里,转换后的脚本使用了NUnit测试框架,为了简化,我用VS的Test Project代替(当然你也可以用Console Application建立测试工程的),步骤如下:
    1.建立Test Project

    2.导入DLL引用

        把selenium-dotnet-client-driver-1.0-beta-2目录中的ThoughtWorks.Selenium.Core.dllThoughtWorks.Selenium.IntegrationTests.dllThoughtWorks.Selenium.UnitTests.dll加入项目:

    3.把上面自动生成的代码再改一下

    using System;
    using System.Text;
    using System.Collections.Generic;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using Selenium;

    namespace SeleniumTest
    {
        [TestClass]
        
    public class UnitTest1
        {
            [TestMethod]
            
    public void Test()
            {
                
    //127.0.0.1为Selenium测试服务器位置。
                
    //4444为Selenium测试服务器监听端口。
                
    //*iexplore为启动浏览器类型,我把它改为了IE浏览器。
                
    //http://www.baidu.com为源地址
                ISelenium selenium = new DefaultSelenium("127.0.0.1"4444"*iexplore""http://www.baidu.com");
                selenium.Start();
                selenium.Open(
    "/");
                selenium.Type(
    "kw""hyddd");
                selenium.Click(
    "sb");
                selenium.WaitForPageToLoad(
    "30000");
                Assert.IsTrue(selenium.IsTextPresent(
    "hyddd - 博客园"));
                selenium.Click(
    "//table[@id='1']/tbody/tr/td/a/font");
    selenium.Close();
                selenium.Stop();
            }
        }
    }

    4.启动Selenium测试服务器
        打开cmd进入selenium-server-1.0-beta-2目录,输入“java -jar selenium-server.jar”
    (需要先安装JRE),启动Selenium测试服务器。

    5.运行测试案例
    (1).运行测试案例:

    (2).测试结果:


    恩,案例Pass了,如果案例失败的话,Error Meesage会说明失败的原因。
    (注 意:和Firefox一样,IE下也有屏蔽弹出网页功能,修改设置方法:MenuBar->Tools->Popup Blocker->Turn off Popup Blocker,或者在Popup Blocker Settings里面配置。)


    Part Six -- 配置 selenium rc for HTTPS 测试

    1。选择工具
    selenium有好几种,首先需要确定的是哪种工具适合

    * selenium IDE: 是一个firefox的plug-in,这个基本上对任何测试都有用,主要是因为可以省下大量的手写测试的时间。根据我的经验,最新的版本(1.0 beta)在RHEL 5.0上不能用,所以我用的是0.87版本。
    在这里下载:http://selenium-ide.openqa.org/download.jsp不过它只能在firefox上用

    * selenium rc : 这个是用来遥控的。(rc = remote controller)如果你需要在一台电脑上控制其它几台电脑进行测试,我用的就是这个。不过我用它的主要原因是它支持比较多的脚本语言(perl,python。。。)写自动测试程序比较容易

    * selenium core : 只能支持Selenese语言(a simple scrīpting language. Selenese has a number of strict limitations: it has no conditionals (no "if" statements), and it has no loops (no "for" statements). This can make writing complicated tests difficult or even impossible.)如果需要知道比较具体的区别的话,还是看它们自己的文件:http://wiki.openqa.org/pages /viewpage.action?pageId=7632

    2。配置
    配置有很多步骤和方面,首先需要了解的是selenium rc的工作流程

    图片看起来好像复杂,但是实际上我们可以将所有的部件放到一台机器上。我们需要了解的是它的工作流程。
    selenium包含三个部件:
    测试程序(testing scrīpt)
    selenium rc (selenium server)
    browser (firefox, in my case)
    他们之间的关系如下
    testing scrīpt <=>selenium server <=> browser
    (1)测试程序将HTTP/HTTPS请求发给selenium server
    (2)selenium server将请求转发(also called proxing)给browser,
    (3)browser 执行请求,得到执行结果,然后回复给selenium server
    (4)selenium server 将回复转发给测试程序*
    (5)测试程序检验测试结果,记录之,然后执行下一个测试
    这个过程中,selenium server和browser必须要在同一台机器上,但是测试程序可以随意。我的配置是三者都在同一台机器上。

    测试环境配置 (testing environment configuration)
    * perl (我使用的是perl) 
    用perl写selenium的测试程序需要首先安装必要的module: Test::WWW::Selenium 
    我的安装方式如下: 
    $> yum install perl.CPAN.386   
          -- yum 是linux里面的程序包安装程序 
    $> perl -MCPAN -e "install Test::WWW::Selenium"  
          --安装Selenium会同时要求你同时安装一些其它的module,比如Test::Mock Test::MockObject Test::More Test::Exception Test::Mock:LWP Test::Pod. 如果你的CPAN配置好了的话,这些安装都是自动的,安装过程中如果有提问,直接回车就好,一般不会有太多问题 (如果需要重新配置perl CPAN,比如说我
       $> perl -MCPAN -e "shell"  
       CPAN> o conf init

    JAVA
    Selenium server 是用Java写的,所以你需要有JAVA。我开始用的是IBM JAVA 1.5后来才发现不行,就转到了SUN的JRE1.6

    * Selenium Core : 在selenium rc 的网站上说需要 selenium core,但是我的经验是不必管它

    * Selenium Server: 
    ** 下载: Selenium 1.0Major release 
    ** unzip selenium-remote-control-1.0-beta-1-dist.zip 
    ** 到这里其实就可以了,但是让程序跑起来,这里需要一个额外的配置: 将firefox-bin放到系统路径里面去
       $> export PATH=$PATH:/usr/lib/firefox-1.5.0.9*

    * HTTPS 
    前面的都很简单。如果你不需要测试HTTPS,那么前面的配置就足够了。但是要让selenium server用HTTPS,还需要将一个专门用于测试的cert放到firefox里面去。步骤如下: 
    ** open firefox 
    ** import certificates: 
    *** go to "Edit->Preference"
       -> open "Advanced" tab
       -> click "Security" (or "Encryption" )  
       -> click "view certificates", a new window will open, 
       -> then select "Web Sites" tab 
       -> then click "import"(图片如下)



    3。最后一步,就是怎么让程序跑起来。这里有三个问题需要注意:
    1> selenium rc beta 1。0 的SSL cert已经过期了(4/18/2008),所以我们需要将我们的系统时间改回到过期之前。
    $> date 041800002007
    2> 需要用让selenium server使用刚刚设定好的firefox profile
    3> 需要设置一个特定的参数(trustAllCertificates),让所有的SSL请求能够顺利通达。[这条在selenium正式的网站上没有写出来,是通过看源程序找到的]


    我的命令如下:

    让selenium server跑起来:
    java -jar ~/server/selenium-server.jar "
         -log /tmp/selenium.log "
         -trustAllSSLCertificates "
         -multiWindow "
         -firefoxProfileTemplate /opt/ipatest.profile

    15:52:10.698 INFO - Writing debug logs to /tmp/selenium.log
    15:52:10.699 INFO - Java: Sun Microsystems Inc. 10.0-b19
    15:52:10.699 INFO - OS: Linux 2.6.18-8.el5 i386
    15:52:10.702 INFO - v1.0-beta-1 [2201], with Core v1.0-beta-1 [1994]
    15:52:10.758 INFO - Version Jetty/5.1.x
    15:52:10.760 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
    15:52:10.762 INFO - Started HttpContext[/selenium-server,/selenium-server]
    15:52:10.763 INFO - Started HttpContext[/,/]
    15:52:10.772 INFO - Started SocketListener on 0.0.0.0:4444
    15:52:10.773 INFO - Started org.mortbay.jetty.Server@5ac072

    让测试程序跑起来:
    perl test.pl

    我的test.pl 程序开头部分如下:
    ----------------------------
    #!/usr/bin/perl

    use strict;
    use warnings;
    use Time::HiRes qw(sleep);
    use Test::WWW::Selenium;
    use Test::More "no_plan";
    use Test::Exception;

    my $sel = Test::WWW::Selenium->new( host => "localhost",
                                        port => 4444,
                                        browser => "*firefox",
                                        browser_url => "https://some.com");

    $sel->open_ok("/testpage");
    $sel->click_ok("link=Add User");
    $sel->wait_for_page_to_load_ok("30000");
    $sel->type_ok("form_title", "auto001");
    $sel->type_ok("form_givenname", "selenium");
    $sel->type_ok("form_sn", "001");
    $sel->type_ok("form_krbprincipalkey", "redhat123");
    $sel->type_ok("form_krbprincipalkey_confirm", "redhat123");
    $sel->click_ok("document.form.submit[1]");
    $sel->wait_for_page_to_load_ok("30000");
    $sel->is_text_present_ok("s001 added!");
    $sel->click_ok("link=Find Users");
    $sel->wait_for_page_to_load_ok("30000");
    $sel->type_ok("uid", "s101");
    $sel->click_ok("//input["@value='Find Users']");
    $sel->wait_for_page_to_load_ok("30000");
    $sel->type_ok("uid", "s001");

    ---------------------------
    我其实没有写什么东西,上面的程序都是selenium IDE自动录的。



    展开全文
  • 更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解 看到网上基本没有最新的chromedriver与chrome的对应关系表,便兴起整理了一份如下,希望对大家有用: chromedriver版本 ...

    更多关于python selenium的文章,请关注我的专栏:Python Selenium自动化测试详解


    看到网上基本没有最新的chromedriver与chrome的对应关系表,便兴起整理了一份如下,希望对大家有用:

    chromedriver版本 支持的Chrome版本
    v2.46 v71-73
    v2.45 v70-72
    v2.44 v69-71
    v2.43 v69-71
    v2.42 v68-70
    v2.41 v67-69
    v2.40 v66-68
    v2.39 v66-68
    v2.38 v65-67
    v2.37 v64-66
    v2.36 v63-65
    v2.35 v62-64
    v2.34 v61-63
    v2.33 v60-62
    v2.32 v59-61
    v2.31 v58-60
    v2.30 v58-60
    v2.29 v56-58
    v2.28 v55-57
    v2.27 v54-56
    v2.26 v53-55
    v2.25 v53-55
    v2.24 v52-54
    v2.23 v51-53
    v2.22 v49-52
    v2.21 v46-50
    v2.20 v43-48
    v2.19 v43-47
    v2.18 v43-46
    v2.17 v42-43
    v2.13 v42-45
    v2.15 v40-43
    v2.14 v39-42
    v2.13 v38-41
    v2.12 v36-40
    v2.11 v36-40
    v2.10 v33-36
    v2.9 v31-34
    v2.8 v30-33
    v2.7 v30-33
    v2.6 v29-32
    v2.5 v29-32
    v2.4 v29-32

    附:
    所有chromedriver均可在下面链接中下载到:

    http://chromedriver.storage.googleapis.com/index.html

    现在有一点好的是出了按照chrome版本对应的driver,直接按照浏览器版本去找对应的driver(只对应大版本就行),不用再费心去对应了,大家可以尝试一下:
    在这里插入图片描述

    有些同学说下不了,到taobao下也是可以的:

    http://npm.taobao.org/mirrors/chromedriver/

    展开全文
  • selenium自动化测试实战

    万次阅读 多人点赞 2018-01-13 21:19:08
    一、Selenium介绍 Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web...
  • 快速搭建Python selenium环境

    万次阅读 2020-01-11 18:28:21
    1.Python安装selenium包:pip install selenium 2.给操作系统安装驱动: ①.查看谷歌浏览器版本 ②.去https://chromedriver.storage.googleapis.com/index.html下载浏览器对应驱动 chromedriver.exe ③.将下载...
  • 1、Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由...
  • 今天在做selenium测试的时候,可能是很久没用了,直接报了这个异常!         相信很多第一次学习selenium的同学们也对这个异常不陌生了,但具体该如何解决这个bug呢?  &...
  • 全栈工程师开发手册 (作者:栾鹏) python教程全解 ...Selenium IDE(如果用Firefox) FireBug、FirePath(如果用Firefox) chromedriver、IEDriverServer、phantomjs.exe IDE(Pycharm/Subl...
  • selenium用法详解

    万次阅读 多人点赞 2017-11-30 06:55:52
    selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的...
  • 关于selenium获取cookie然后实现免登录

    万次阅读 多人点赞 2018-06-06 12:21:54
    这几天一直想搞明白cookie的爬虫使用,结果从昨天晚上开始试验,selenium获取的cookie怎么也无法实现直接登录,气的想打人。在刚才终于发现一些问题,在和浏览器中的cookie对比发现格式不一样,然后对着他进行格式...
  • Python selenium —— selenium与自动化测试成神之路

    万次阅读 多人点赞 2016-09-17 00:33:04
    很多都是明显的语法问题,一问方知,今天刚刚学selenium,之前也没有语法基础,没学过Java,没学过Python,就跑来搞selenium,想玩自动化。每当看到这样的同学,总是很想吐槽。今天博主也不是想要吐槽,只
  • 2019 Selenium Chrome版本与chromedriver兼容版本对照表

    万次阅读 多人点赞 2018-06-05 13:51:59
    在使用selenium启动谷歌Chrome浏览器的时候,是需要用到chromedirver的,两者之间的版本是需要匹配的,否则会出现下面类似的报错: Exception in thread "main" org.openqa.selenium.WebDriverException: unknown ...
  • Selenium selenium 是当下非常流行的自动化测试框架,selenium是开源项目。 selenium是一个大家族,这个家族中的主要成员有如下所示: selenium RC: selenim RC是selenium家族的核心,selenium RC支持多种...
  • 文章目录前言一、使用selenium前?1.安装selenium2.安装浏览器驱动3.配置环境二、使用selenium1.引入库2.代码 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也...
  • 1、selenium1(关键是selenium IDE只支持在火狐浏览器安装组件录制脚本并导出Junit4RC+jave脚本+selenium RC需要运行selenium服务)和selenium2(selenium webdriver包括server+server源码+standal...
  • python 爬虫之selenium可视化爬虫

    万次阅读 多人点赞 2020-08-05 19:52:11
    之所以把selenium爬虫称之为可视化爬虫 主要是相较于前面所提到的几种网页解析的爬虫方式 selenium爬虫主要是模拟人的点击操作 selenium驱动浏览器并进行操作的过程是可以观察到的 就类似于你在看着别人在帮你操纵你...
  • 在使用selenium模块进行数据爬取时,通常会遇到爬取iframe中的内容。会因为定位的作用域问题爬取不到数据。 问题描述: 我们以菜鸟教程的运行实例为案例。 按照正常的定位 会以文本块生成xpath为/html/body/text()...
  • selenium-ide-2.5.0工具

    千次下载 热门讨论 2014-04-16 17:41:57
    功能测试软件,使用selenium-ide-2.5.0功能测试组件,只要打开firefox(火狐)浏览器,工具附加组件,从文件安装附件组件,附加组件就行!
  • 一、selenium1的原理  selenium 1 包括以下两部分:seleniumserver、 Client Libraries组成  1. selenium server  selenium server负责控制浏览器的行为。主要有launcher,Http Proxy,selenium core。...
  • Selenium 简介 Selenium 是支持 Web 浏览器自动化的一系列工具和库的集合。Selenium 是开源项目。目前最新版本为Selenium 3。 Selenium 支持多平台,如:Linux、Windows和mac OS。 Selenium 支持多种编程语言,如:...
  • python+selenium 自动填写表单并提交

    万次阅读 多人点赞 2018-03-08 16:22:30
    准备:python 3.6 +selenium + chromedriver2.35 chromedriver 要兼容本地的chrome 对应版本号 https://chromedriver.storage.googleapis.com/2.36/notes.txt ChromeDriver Chrome ...
  • Selenium篇如期而至,不同于前一个appium的系列,这个系列将直接带大家从selenium工具的入门到进阶 此外这一个系列的全部都将附带视频教学,需要视频教学的可以点击并输入暗号:CSDN 那么就开始吧!!! 目录前言第 ...
  • 获取cookies: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/1/1 15:53 ...from selenium import webdriver from time import sleep import json if __name__ == '__main__': driver
  • #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/12/24 10:46 # @Author : huni # @File : csdn签到.py # @Software: PyCharm from selenium import webdriver ...from selenium.webdriv

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 108,088
精华内容 43,235
热门标签
关键字:

selenium