美文网首页程序员
【selenium自动化操作】从零开始玩转自动化

【selenium自动化操作】从零开始玩转自动化

作者: 代码小姐 | 来源:发表于2020-08-03 19:22 被阅读0次

    selenium自动化操作

    在前面爬虫的相关介绍中,我们介绍了如何抓取静态页面信息。但是,在实际的网页浏览过程中,我们可能会经常碰到各种需要进行交互的操作,典型的如输入信息、点击按钮之类。

    对于这种场景,之前的静态页面操作方式已经不能满足需求,这时我们需要借助新的工具,比如selenium或者PhantomJS。由于后者已经停止维护,推荐使用前者。

    1.selenium是什么

    如果大家有做过web的自动化测试,相信对于selenium一定不陌生,测试人员经常使用它来进行自动化测试。

    selenium最初是一个自动化web测试工具,通过代码模拟人使用浏览器自动访问目标站点并操作,比如跳转、输入、点击、下拉等。

    由于开发者的不断完善,目前的功能越来越强大,基本支持各种交互操作。同时,不止支持有界浏览,还支持无界浏览。

    2.selenium有什么用

    正如我们前面讲过的,爬虫的本质过程就是模拟人对浏览器的操作过程。在爬虫中使用,selenium主要是为了解决requests无法执行javaScript代码的问题。

    本质上是通过驱动浏览器,完全模拟浏览的操作,比如跳转、输入、点击、下拉等...进而进行跳转。

    当然,它也有坏处,主要的坏处就是它的速度比较慢。原因是selenium在操作时,需要等浏览器对页面的元素渲染好之后才能操作。而我们知道,由于页面渲染过程需要加载各种资源,响应速度与网络带宽要求非常高。通常情况,它比静态页面的响应至少慢一个数量级。

    3.如何使用selenium

    在知道selenium是什么以及有什么用之后,我们来具体学习如何操作这个工具。

    由于selenium本质是模拟人对浏览器进行输入、选择、点击等操作,因此对于目标标签的定位非常重要。

    在前面的章节,我们对于如何定位目标标签有过详细的介绍,这里就不再赘述。selenium对于目标标签定位的方式本质与静态的页面一样,只不过因为使用的包不同,因此在beautifulSoup中使用的是find和findAll,而在selenium中使用的接口有所变化。

    下图中已对各种定位方式进行了归纳总结:


    image

    在找到目标标签之后,最重要的是对这些标签进行模拟操作。Selenium库下webdriver模块常用方法主要分类两类:一类是模拟浏览器、键盘操作,另一类是模拟鼠标操作。

    3.1模拟浏览器、键盘操作

    模拟浏览器、键盘操作的方法归纳如下:


    image

    3.2 模拟鼠标操作

    模拟鼠标操作的方法归纳如下:


    image

    4.示例演示

    在介绍了selenium相关的使用方法之后,我们来进行操作。这里介绍两个例子:第一个例子是模拟百度搜索,第二个例子是模拟自动登录网易163邮箱发送邮件。

    在开始示例之前我们需要安装selinum插件包,同时还需要下载webdriver。在我们的示例中,需要是使用chrome浏览器进行操作,需要使用浏览器的驱动webdriver。

    关于下载什么版本的webdriver,可以在浏览器的属性中查看,并在http://npm.taobao.org/mirrors/chromedriver/下载对应的版本就好,如果是其他的浏览器,则需要下载对应的浏览器驱动程序,这种不再做进一步介绍。

    image image

    4.1模拟百度搜索

    第一步还是需要打开目标的地址“w w w.baidu.com”,分析目标网页中目标元素的特点,如下图所示:


    image

    通过分析,我们很容易就找到搜索框的id为kw,点击按钮的id为su,余下的就是使用方法进行模拟。

    实现的代码如下所示:

    from selenium import webdriver
    
    #get 方法 打开指定网址
    driver=webdriver.Chrome()
    driver.get('http://www.baidu.com')
    
    #选择网页元素
    element_keyword = driver.find_element_by_id('kw')
    
    #输入字符
    element_keyword.send_keys('python 爬虫')
    
    #找到搜索按钮
    element_search_button = driver.find_element_by_id('su')
    element_search_button.click()
    
    driver.close()
    

    4.2模拟自动登录网易163邮箱发送邮件

    操作过程跟上面相似,第一步也是分析目标网页http://mail.163.com

    如下图所示:


    image

    找到了目标标签然后就是模拟登录。

    实现代码如下:

    # coding:UTF-8
    import time
    from selenium.webdriver.common.keys import Keys
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)  
    driver.get('http://mail.163.com/')
    driver.switch_to_frame(driver.find_element_by_tag_name('iframe'))
    # driver.switch_to_frame('x-URS-iframe')  
    driver.find_element_by_name('email').clear()
    driver.find_element_by_name('email').send_keys('邮箱地址')
    driver.find_element_by_name('password').send_keys('邮箱密码', Keys.ENTER)
    # 跳转页面时,强制等待6s
    time.sleep(6)   
    # 点击写信按钮
    driver.find_element_by_xpath("//div[@id='dvNavTop']/ul/li[2]/span[2]").click()   
    time.sleep(2)
    # 收件人
    driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('目标的邮箱')  
    driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']").send_keys(
        u'测试')   # 主题
    xpath = driver.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe")
    # 文本内容在iframe中
    driver.switch_to_frame(xpath)   
    driver.find_element_by_xpath("//body[@class='nui-scroll' and @contenteditable='true']").send_keys(u'这是一个自动化测试邮件')
    # 发送按钮在iframe外,所以需要跳出
    driver.switch_to_default_content()
    # 发送
    driver.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()  
    driver.close()
    

    当然,在实际过程中,可能往往还有验证码的验证。因为现在的验证码难度越来越大,形式也多种多样,使用常规的方法很难解决,必须借助机器学习或者第三方接口进行实现,将在后续单独列一个章节进行介绍如何破解验证码。
    ​如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的,都可以加入我们313782132。群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

    相关文章

      网友评论

        本文标题:【selenium自动化操作】从零开始玩转自动化

        本文链接:https://www.haomeiwen.com/subject/yuakrktx.html