Selenium, ChromeDriver 自动化测试,抓取网页元素,java

Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的Internet Explorer、Mozilla 和 Firefox 中运行
在这里以chrome 为例 进行介绍
1)安装 chrome 浏览器
 2)下载 chromedriver地址:https://code.google.com/p/chromedriver/
  3)下载 selenium-java http://docs.seleniumhq.org/download/
import java.io.File; import java.io.IOException; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriverService; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; public class ExampleForChrome { public static voidmain(String[] args) throws IOException { // 设置 chrome 的路径(如果你安装chrome的时候用的默认安装路径,则可省略这步) System.setProperty("webdriver.chrome.driver","C:/Users/sunlc/AppData/Local/Google/Chrome/Application/chrome.exe"); // 创建一个 ChromeDriver 的接口,用于连接 Chrome(chromedriver.exe 的路径可以任意放置,只要在newFile()的时候写入你放的路径即可) @SuppressWarnings("deprecation") ChromeDriverService service = newChromeDriverService.Builder().usingDriverExecutable( newFile("E:/lib/selenium/dirver/chromedriver_2.9.exe")) .usingAnyFreePort().build(); service.start(); // 创建一个 Chrome 的浏览器实例 WebDriver driver = newRemoteWebDriver(service.getUrl(), DesiredCapabilities.chrome()); // 让浏览器访问 Baidu driver.get("http://www.baidu.com"); // 用下面代码也可以实现 //driver.navigate().to("http://www.baidu.com"); // 获取 网页的 title System.out.println(" Page title is: " +driver.getTitle()); // 通过 id 找到 input 的 DOM WebElement element =driver.findElement(By.id("kw1")); // 输入关键字 element.sendKeys("zTree"); // 提交 input 所在的 form element.submit(); // 通过判断 title 内容等待搜索页面加载完毕,间隔秒 (new WebDriverWait(driver, 10)).until(newExpectedCondition() { publicBoolean apply(WebDriver d) { returnd.getTitle().toLowerCase().startsWith("ztree"); } }); // 显示搜索结果页面的 title System.out.println(" Page title is: " +driver.getTitle()); // 关闭浏览器 driver.quit(); // 关闭 ChromeDriver 接口 service.stop(); } }

//有时候,你要获取一个网页中表格中的所有内容,可能该表格内容过多会分页显示,这时候,表格的内容不显示完全,你是不可以获取到全部内容的,然后你可以试试以下代码:
//获取js选择器
JavascriptExecutor js = (JavascriptExecutor) driver;
//因为你要点击类似“更多”这样的按钮,才能显示后部分内容,arguments[0].click()就是点击,后面的参数意思是通过id找到这个按钮,当然,你也可以通过其他方式找到需要点击的按钮。
js.executeScript("arguments[0].click();", driver.findElement(By.id("more_count")));
另外,还可以参考下面的例子
import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author alex * */ public class ChromeDriverTest { /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { new ChromeDriverTest().testBaiduSearch(); } public void testBaiduSearch() throws InterruptedException { // Optional, if not specified, WebDriver will search your path for // chromedriver. System.setProperty("webdriver.chrome.driver", "./lib/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("http://www.newrank.cn/public/info/list.html?period=week&type=data"); Thread.sleep(5000); WebElement more = driver.findElement(By.cssSelector("p.showmore a")); more.click(); Thread.sleep(5000); // Let the user actually see something! List names = driver.findElements(By.cssSelector("table tbody tr td h4 a")); for(WebElement e : names) { System.out.println(e.getText()); } Thread.sleep(5000); // Let the user actually see something! driver.quit(); } }


你可能感兴趣的:(其他)