Selenium

作者: 尛白兔 | 来源:发表于2017-09-18 21:31 被阅读54次

    一、什么Selenium

    Selenium是一个用于Web应用程序测试的工具,它可以模拟真实浏览器,自动化测试工具,支持多种浏览器,也可以作爬虫,主要用来解决JavaScript渲染问题。

    支持的浏览器包括IE, Firefox, Chrome, PhantomJS等,这里特别说一下PhantomJS,它是一个无头浏览器(没有图形界面),但是它可以像普通的浏览器一样输入文字,点击按钮,执行js代码等

    二、Selenium基本使用

    实例化浏览器对象
    from  selenium import webdriver
    
    browser = webdriver.PhantomJS()  
    # 或者
    browser = webdriver.Chrome()
    
    使用selenium访问页面
    from  selenium import webdriver
    
    browser = webdriver.PhantomJS()  
    browser.get("http://www.baidu.com")
    print(browser.page_source)
    browser.close()
    

    执行上面这部份代码会打印百度首页的源代码,如果使用的是Chrome()或者其他浏览器,首先他会打开浏览器并访问百度首页,然后控制台打印源代码,最后关闭浏览器。需要注意的是,Chrome和Firefox都需要装一个叫driver的东西(Chrome的叫chromedriver,firefox的叫geckodriver),下载后把他们加到环境变量中就可以了。

    元素查找
    单个元素
    通过css选择器
    e1 = browser.find_element_by_id("xxx")
    e2 = browser.find_element_by_css_selector(".ooo")
    # 通过xpath
    e3 = browser.find_element_by_xpath('/xxxx/ooo')
    

    查找器返回的是WebElement对象

    常用的元素查找方法

    find_element_by_name
    find_element_by_id
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector
    

    使用By模块查找

    from  selenium import webdriver
    from selenium.webdriver.common.by import By
    
    browser = webdriver.PhantomJS()  
    browser.get("http://www.baidu.com")
    
    input_kw = browser.get_element(By.ID, "kw")
    print(input_kw)
    browser.close()
    
    
    多个元素查找
    # 就是把element换成elements,返回的是列表
    li = browser.find_elements_by_css_selector('li')
    
    将页面截图保存
    browser.save_screenshot("xxx.jpg")
    
    交互操作
    input_kw = browser.get_element(By.ID, "kw")
    # 往input框输入
    input_kw.send_keys("python")
    # input_kw.clear() 清除输入框
    button = browser.get_element(By.ID, "su")
    # 点击按钮
    button.click()
    # 结果在browser中可以查看
    

    将多个操作串行执行

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    browser = webdriver.Chrome()
    
    url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
    browser.get(url)
    browser.switch_to.frame('iframeResult')
    source = browser.find_element_by_css_selector('#draggable')
    target = browser.find_element_by_css_selector('#droppable')
    actions = ActionChains(browser)
    # 将source元素拖动到target元素上
    actions.drag_and_drop(source, target)
    # 执行
    actions.perform()
    

    执行JavaScript

    browser.execute_script('alert("hello world")')
    

    获取内容

    
    source = browser.find_element_by_css_selector('#draggable')
    # 获取属性
    print(source.get_attribute('class'))
    # 获取文本
    print(source.text)
    # 获取id
    print(source.id)
    # 位置
    print(source.location)
    # 标签名
    print(source.tag_name)
    

    切换选项卡

    有时候点击一个链接后会打开一个新的选项卡

    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')
    browser.execute_script('window.open()')
    print(browser.window_handles)
    # 切换到第2个选项卡
    browser.switch_to_window(browser.window_handles[1])
    browser.get('https://www.taobao.com')
    

    前进与后退

    import time
    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.zhihu.com')
    browser.get('https://www.jianshu.com')
    browser.back()
    browser.forward()
    

    cookie操作

    from selenium import webdriver
    
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')
    print(browser.get_cookies())
    browser.add_cookie({'xxx': 'ooo'})
    print(browser.get_cookies())
    browser.delete_all_cookies()
    print(browser.get_cookies())
    

    还有很多操作,可以在官方文档中查找

    相关文章

      网友评论

        本文标题:Selenium

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