• selenium模块


    一、简介

    selenium自动化测试工具,爬虫中主要解决浏览器渲染的问题,过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果。

    二、安装

    三、使用

    1.简单使用
    from selenium import webdriver
    from lxml import etree
    import time
    chrome = webdriver.Chrome(executable_path = '../chromedriver.exe') #创建浏览器对象
    chrome.get('https://www.baidu.com')    #访问网页
    
    #解析
    page_text = chrome.page_source   #获取源代码
    tree = etree.HTML(page_text)     
    #百度搜索
    
    # 1.获取元素,并输入搜索内容
    chrome.find_element_by_id('kw').send_keys('哔哩哔哩')
    # 2.点击按钮
    chrome.find_element_by_id('su').click()
     # 或  chrome.find_element_by_link_text('百度一下').click()
    time.sleep(2)  #防止页面没有加载完,导致解析出错
    chrome.find_element_by_xpath('//div[@id="1"]/h3/a[1]').click()
    #处理弹出的警告页面   确定accept() 和 取消dismiss()
    #chrome.switch_to_alert().accept()
    chrome.quit() #关闭  chrom.close()
    

    #前进和后退
    chrome.back()
    chrome.forward()
    
    2.常用的元素获取方法

    find_element_by_id()
    find_element_by_name()
    find_element_by_class_name()
    find_element_by_tag_name()
    find_element_by_link_text()
    find_element_by_partial_link_text()
    find_element_by_xpath()
    find_element_by_css_selector()

    find_element_by_xxx找的是第一个符合条件的标签,find_elements_by_xxx找的是所有符合条件的标签。

    3.执行JavaScriptdaim
    chrome.get('https://www.jd.com/')
    chrome.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    chrome.execute_script('alert("执行完毕")')
    
    4.动作链

    webdriver中的ActionChains可以对需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等进行操作。ActionChains方法列表:

    click(on_element=None) ——单击鼠标左键

    click_and_hold(on_element=None) ——点击鼠标左键,不松开

    context_click(on_element=None) ——点击鼠标右键

    double_click(on_element=None) ——双击鼠标左键

    drag_and_drop(source, target) ——拖拽到某个元素然后松开

    drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

    key_down(value, element=None) ——按下某个键盘上的键

    key_up(value, element=None) ——松开某个键

    move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

    move_to_element(to_element) ——鼠标移动到某个元素

    move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置

    perform() ——执行链中的所有动作

    release(on_element=None) ——在某个元素位置松开鼠标左键

    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

    ActionChains类中的动作要调用perform()才会执行

    from selenium import webdriver
    import time
    chrome = webdriver.Chrome('../chromedriver.exe')
    chrome.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
    chrome.switch_to.frame('iframeResult')
    action = webdriver.ActionChains(chrome)
    source = chrome.find_element_by_id('draggable')
    
    '''
    方法1
    target = chrome.find_element_by_id('droppable')
    
    action.drag_and_drop(source,target)
    action.perform()
    chrome.switch_to_alert().accept()
    '''
    #方法2
    action.click_and_hold(source)
    action.move_by_offset(xoffset=75,yoffset=0).perform()
    time.sleep(0.5)
    action.release(source).perform()
    chrome.switch_to_alert().accept()
    
    5.谷歌无头浏览器

    控制浏览器以无界面模式打开

    from selenium import webdriver
    chrome_options = webdriver.chrome.options.Options()
    chrome_options.add_argument('--headless')
    path = '../chromedriver.exe'
    chrome = webdriver.Chrome(executable_path=path,chrome_options = chrome_options)
    

    控制浏览器窗口大小

    有时我们需要对移动站点的样式进行评估,可是浏览器的正常尺寸很显然是不合适的, 此时我们会想将浏览器设置成移动端大小就可以了。WebDriver提供了set_window_size()方法来设置浏览器大小:

    from selenium.webdriver import Chrome
    driver = Chrome('C:Program Files (x86)GoogleChromeApplicationchromedriver.exe')
    driver.get('https://www.baidu.com/')
    driver.set_window_size(480,800)
    

    除了set_window_size方法来设置浏览器的大小,WebDriver还提供了一个设置浏览器全屏显示的方法maximize_window(),其用法与set_window_size()相同,不同的是maximize_window()无需传递参数:

    from selenium.webdriver import Chrome
    driver = Chrome('C:Program Files (x86)GoogleChromeApplicationchromedriver.exe')
    driver.get('https://www.baidu.com/')
    driver.maximize_window()
    

    值得注意的是,在定位元素的时候,有些网页如果不是全屏展示时,将由可能定位不准!!!

    控制浏览器前进与后退

    在使用浏览器浏览网页时,浏览器提供了前进和后退的按钮,可以方便的在浏览过的网页之间进行切换,WebDriver也提供了相应的back()forward()方法来模拟后退和前进按钮,下面举个简单的栗子来演示这两个方法的使用:

    from selenium.webdriver import Chrome
    driver = Chrome('C:Program Files (x86)GoogleChromeApplicationchromedriver.exe')
    driver.get('https://www.baidu.com')
    driver.get('https://www.cnblogs.com/')
    # 后退至百度页面
    driver.back()
    # 前进至博客页面
    driver.forward()
    

    刷新页面

    有时候需要手动刷新(F5)页面,WebDriver也提供了相应的方法refresh(),使用起来很简单,如下:

    driver.refresh()
    

    窗口截屏

    自动化用例是由程序去执行的,因此有些时候打印的错误信息并不十分明确。如果在脚本执行出错的时候能够对当前窗口截图保存,那么通过图片就可以非常直观的看出出错的原因。WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口:

    from selenium.webdriver import Chrome
    driver = Chrome('C:Program Files (x86)GoogleChromeApplicationchromedriver.exe')
    driver.get("https://www.baidu.com/")
    driver.get_screenshot_as_file("abc.png")
    

    当使用窗口截屏功能时,图片的扩展名必须是png

  • 相关阅读:
    20180315 代码错题(7)
    20180315 代码错题(6)
    20180315 代码错题(5)
    20180315 代码错题(4)
    01背包问题(动态规划)
    等差素数列 暴力搜索
    小L记单词
    三角形
    小L的试卷
    小L的项链切割 (回文串)
  • 原文地址:https://www.cnblogs.com/notfind/p/11632352.html
Copyright © 2020-2023  润新知