相关文章推荐
瘦瘦的伤痕  ·  laravel ...·  2 年前    · 
可爱的伏特加  ·  php ...·  2 年前    · 
光明磊落的烤面包  ·  Android kotlin ...·  2 年前    · 
温柔的领带  ·  SpringBoot 使用Filter ...·  2 年前    · 
org.seleniumhq.selenium selenium-java ${selenium.version}

selenium-java 是 selenium的java 版,根据不一样driver,能够驱动不一样的浏览区,好比 selenium-chrome-driver、selenium-edge-driver、selenium-firefox-driver、selenium-ie-driver、selenium-opera-driver、phantomjsdriver等等,我用了其中的chromedriver 和 phantomjsdriver,这个能彻底模拟真实用户操做,不错的测试框架。

各浏览器下载地址:

Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver | taobao备用地址
http://chromedriver.storage.googleapis.com/index.html
https://registry.npmmirror.com/binary.html?path=chromedriver/
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs

浏览器驱动

WebDriver driver = new ChromeDriver();//Chrome浏览器
WebDriver driver = new FirefoxDriver();//Firefox浏览器
WebDriver driver = new EdgeDriver();//Edge浏览器
WebDriver driver = new InternetExplorerDriver();//IE浏览器
WebDriver driver = new OperaDriver();//Opera浏览器
  • 8 种定位方法:id、name、class name、 tag name 、link text 、partial link text 、xpath、 css selector。对应方法如下:
  • findElement(By.id());
    findElement(By.name());
    findElement(By.className());
    findElement(By.tagName());
    findElement(By.linkText());
    findElement(By.partialLinkText());
    findElement(By.xpath());
    findElement(By.cssSelector());
    2. 控制浏览器操作

  • 控制浏览器窗口大小
  • maximize() 设置浏览器最大化
    setSize() 设置浏览器宽高
    driver.manage().window().maximize();
    driver.manage().window().setSize(new Dimension(450, 600));
    
  • 控制浏览器后退、前进
  • back() 模拟浏览器后退按钮
    forward() 模拟浏览器前进按钮
    driver.navigate().back();
    driver.navigate().forward();
    
  • 刷新页面 refresh()
  • driver.navigate().refresh();
    
    clear() 清除文本。
    sendKeys(*value) 模拟按键输入
    click() 单击元素
    submit()提交表单
    getSize() 返回元素的尺寸
    getText() 获取元素的文本
    getAttribute(name) 获得属性值
    isDisplayed() 设置该元素是否用户可见
    close() 关闭当前窗口,如果它是当前打开的最后一个窗口,则退出浏览器
    quit() 退出此驱动程序,关闭所有相关窗口
    
    contextClick() 右击
    clickAndHold() 鼠标点击并控制
    doubleClick() 双击
    dragAndDrop() 拖动
    release() 释放鼠标
    perform() 执行所有Actions中存储的行为
    
    //双击“百度一下”
    Actions action = new Actions(driver);
    action.doubleClick(driver.findElement(By.id("su"))).perform();
    
    常用键盘操作全选、回车、删除、cv等等,对应操作有:
    sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)
    sendKeys(Keys.SPACE) 空格键(Space)
    sendKeys(Keys.TAB) 制表键(Tab)
    sendKeys(Keys.ESCAPE) 回退键(Esc)
    sendKeys(Keys.ENTER) 回车键(Enter)
    sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
    sendKeys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
    sendKeys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
    sendKeys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
    sendKeys(Keys.F1) 键盘 F1
    //eg:删除键使用
    WebDriver driver = new ChromeDriver();
    driver.get("https://www.baidu.com");
    WebElement input = driver.findElement(By.id("kw"));
    input.sendKeys("hello");
    input.sendKeys(Keys.BACK_SPACE);
    
  • 定位一组元素
  • 针对第二部分描述,只需要在原来加一个s就可以获取一个List列表
    findElements(By.id())
    findElements(By.name())
    findElements(By.className())
    findElements(By.tagName())
    findElements(By.linkText())
    findElements(By.partialLinkText())
    findElements(By.xpath())
    findElements(By.cssSelector())
    
  • 表单和窗口切换
  • 1).表单切换。frame/iframe 表单嵌套页面需要通过 switchTo().frame()方法切换,frame()里传递的参数为定位frame的WebElement。
    2).窗口切换。需要获取窗口权柄然后切换页面。
    
  • 下拉框选择
  • Select类处理下拉框
    //eg:获取下拉框元素,实例化Select类,然后通过selectByValue选择
    WebElement element = driver.findElement(By.id("//select"));
    Select sel = new Select(element);
    sel.selectByValue("10");
    
  • 警告框/alert处理
  • getText(): 返回 alert/confirm/prompt 中的文字信息。
    accept(): 接受警告框。
    dismiss(): 解散警告框。
    sendKeys(keysToSend): 发送文本至警告框。
    keysToSend: 将文本发送至警告框。
    //eg:接受警告框。
    driver.switchTo().alert().accept();
    
  • 截图/滚动截图
  • Selenium提供了一种功能,称为TakeScreenShot界面,可用于拍摄可视区域的屏幕截图,该接口提供getScreenshotAs的方法,可捕获屏幕截图并将其存储在所需的位置

    //eg:截图
    File srcfile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
    FileInputStream fileInputStream = new FileInputStream(srcfile);
    //eg:滚动截图
    PageSnapshot pageSnapshot = Shutterbug.shootPage(driver, Capture.FULL);
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(pageSnapshot.getBytes());
    
  • 浏览器cookies
  • getCookies() 获得所有 cookie 信息。
    getCookieNamed(String name) 返回字典的key为“name”的Cookie信息。
    addCookie(cookie dict) 添加Cookie。“cookie_dict”指字典对象,必须有 name和value值。
    deleteCookieNamed(String name) 删除Cookie 信息。 “name”是要删除的 cookie的名称; “optionsString” 是该Cookie的选项,目前支持的选项包括“路径” , “域” 。
    deleteAllCookies() 删除所有 cookie 信息。
    WebDriver driver = new ChromeDriver();
    driver.get("https://www.baidu.com");
    Cookie cookie1 = new Cookie("name", "cookieName");
    Cookie cookie2 = new Cookie("value", "cookieValue");
    driver.manage().addCookie(c1);
    driver.manage().addCookie(c2);
    //获取 cookie
    Set<Cookie> cookie = driver.manage().getCookies();
    //删除所有 cookie
    driver.manage().deleteAllCookies();
    
  • 调用JavaScript
    WebDriver提供了executeScript()方法来执行JavaScript代码
  • //eg:
    //实例化JavascriptExecutor
    JavascriptExecutor driver_js = ((JavascriptExecutor) driver);
    //编写js
    String js="window.location.href = 'https://www.baidu.com/';";
    //执行js代码
    driver_js.executeScript(js);
    
            ChromeOptions options = new ChromeOptions();
            // 设置容许弹框
            options.addArguments("disable-infobars","disable-web-security");
            // 设置无gui 开发时仍是不要加,能够看到浏览器效果
            options.addArguments("--headless");
            String driverPath =  "C:\\Users\\Administrator\\Desktop\\chromedriver\\chromedriver.exe";
            System.setProperty("webdriver.chrome.driver", driverPath);
            RemoteWebDriver driver=  new ChromeDriver(options);
            driver.get("https://item.jd.com/100033901461.html");
    

    注意LINUX部署

    yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
    rpm -i google-chrome-stable_current_x86_64.rpm
    google-chrome -version
    //下载驱动赋权限
    chmod a+x chromedriver
    cd /usr/sbin
    google-chrome
    
        // 设置容许弹框
        options.addArguments("disable-infobars","disable-web-security");
        // 设置无gui 开发时仍是不要加,能够看到浏览器效果
        options.addArguments("--headless");
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-gpu");
        options.addArguments("--disable-dev-shm-usage");
    
    文章标签: JavaSpringBoot
    推荐指数:

    真诚点赞 诚不我欺~ spring boot+selenium爬取数据 点赞 收藏 评论