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");