Java 爬虫入门

447 阅读1分钟

java + selenium + chromedriver实现动态网页抓取

1.搭建java运行环境

Android Studio编写java工程参考链接

2.依赖selenium库

compile 'org.seleniumhq.selenium:selenium-java:2.44.0'

3.下载chromedriver

注意:与谷歌浏览器版本一致

chromedriver.storage.googleapis.com/index.html

npm.taobao.org/mirrors/chr…

4.编写代码

1.创建ChromeDriver

    //安装chromedrive的位置
    String chromdriver = "/Users/anou/Documents/javaUtils/chromedriver";
    System.setProperty("webdriver.chrome.driver", chromdriver);
    ChromeOptions options = new ChromeOptions();


// 设置代理ip
//        String ip = "ip:port";
//        options.addArguments("--proxy-server=http://" + ip);

//        options.addArguments("--test-type", "--start-maximized", "--lang=" + "zh_CN.UTF-8", "--headless"); //不打开浏览器
        options.addArguments("--test-type", "--start-maximized", "--lang=zh_CN.UTF-8"); // 打开浏览器
//不加载图片, 提升速度
//        options.addArguments("blink-settings=imagesEnabled=false"); 
        options.addArguments("disable-infobars");     // Chrome正在收到自动测试软件的控制
//        chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
//        chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
//        chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
//        chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

        WebDriver driver = new ChromeDriver(options);

2.基本 WebDriver api

参考:www.cnblogs.com/marton/p/11…

WebDriver提供了八种元素定位方: 在Java语言中对应的定位方法:

·name               findElement(By.name())

·class name            findElement(By.className())

·tag name             findElement(By.tagName())

·link text             findElement(By.linkText())

·partial link text         findElement(By.partialLinkText())

·xpath              findElement(By.xpath())

·css selector           findElement(By.cssSeletor())

<input type="text" name="passwd" id="passwd-id" />
<button type="text" name="passwd" id="btn" />
//访问百度网页
driver.get("http://www.baidu.com");
//访问搜狗网页
driver.navigate().to("http://www.sogou.com");
driver.navigate().back(); //访问上一次访问的百度网页

//打开指定网页
driver.get("http://www.google.com")

//获取输入框元素
WebElement searchInput = driver.findElement(By.id("passwd-id"));
//输入指定内容
searchInput.sendKeys("hello world");

//获取按钮元素
WebElement btn = driver.findElement(By.id("btn"));
//单击按钮元素
btn.click();

3. WebElement基本api

参考: www.cnblogs.com/unknows/p/7…

获取元素的文本

<input type="text" value="" autocomplete="off" placeholder="用户名" id="u" class="form-control" onblur="checkFailNum()" name="username">

WebElement login = driver.findElement(By.id("loginBtn"));
login.getText();

获得元素属性的值

//getAttribute(java.lang.String name) 这方法,代码如下:
WebElement username = driver.findElement(By.id("u"));
username.getAttribute("placeholder");