环境—谷歌浏览器为例
下载对应版本的chromedriver.exe
查看自己的谷歌版本,地址栏输入: chrome://version/
下载地址:http://npm.taobao.org/mirrors/chromedriver/ (Windows都下载32位)
maven仓库搜索 selenium-java 引入jar包
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
初始化:
//访问的网页
private static final String URL = "https://www.baidu.com";
private static WebDriver driver = null;
/**
* 初始化driver
*/
private static void initDriver(){
//设置驱动chromedriver.exe
System.setProperty("webdriver.chrome.driver","C:\\Users\\44141\\Desktop\\chromedriver\\chromedriver.exe");
// 设置不弹出浏览器窗口
//ChromeOptions chromeOptions = new ChromeOptions();
//chromeOptions.addArguments("--headless");
//driver = new ChromeDriver(chromeOptions);
driver = new ChromeDriver();
}
基本使用 WebDriver、WebElement :
private static void test(){
//初始化驱动
initDriver();
//打开浏览器
driver.get(URL);
//获取当前页面的url
String currentUrl = driver.getCurrentUrl();
System.out.println("当前页面的URL为:" + currentUrl);
//获取最后一个被加载的页面的源代码
String pageSource = driver.getPageSource();
System.out.println("页面源代码:" + pageSource);
//获取所有通过WebDriver打开的窗口的句柄,唯一标识,返回一个Set<String>的集合
Set<String> windowHandles = driver.getWindowHandles();
for(String s : windowHandles){
System.out.println("循环内输出:" + s);
}
//获取当前窗口的句柄
String windowHandle = driver.getWindowHandle();
System.out.println("当前窗口的句柄:" + windowHandle);
//跟进id获取页面元素 相当于在页面根据id选择器获取 document.getElementById()、#id,返回的对象可对获取的页面元素进行操作
//这里是获取百度页的输入框
WebElement element = driver.findElement(By.id("kw"));
//sendKeys输入内容 ,也可以模拟键盘进行其他操作
element.sendKeys("WebElement");
//清空输入框内容
//element.clear();
//查看元素是否是显示状态,显示返回true ,不显示返回false , 修改样式为display:none则返回false
boolean isDisplayed = element.isDisplayed();
//查看元素是否已启用 页面元素设置disabled="true" 返回false
boolean isEnabled = element.isEnabled();
//isSelected() 查看元素是否被选中 选择框使用
//获取标签tag的名称
String input = element.getTagName();
System.out.println("#kw使用的标签是:" + input);
//获取百度首页的按钮
WebElement btnElement = driver.findElement(By.id("su"));
//submit提交form表单 或者 选中按钮type为submit的按钮进行提交
btnElement.submit();
System.out.println("当前窗口的句柄:" + windowHandle);
try {
//睡两秒等待页面加载
Thread.sleep(2000);
}catch (Exception e){
e.printStackTrace();
}
//获取多个元素,里面是选择器 类似于js
List<WebElement> list = driver.findElements(By.className("t"));
//这里获取到了百度首页输入 WebElement 点击搜索 查询出来的结果
for(WebElement e : list){
//getText获取文本 相当于 js 的document.getElementById('id').text ,$(this).text();
System.out.println("搜索到的内容:=======" + e.getText());
}
System.out.println("当前窗口的句柄:" + windowHandle);
executeJs(driver);
System.out.println("test end");
}
WebDriver 执行js文件:
/**
* 执行js代码
* @param driver
*/
private static void executeJs(WebDriver driver){
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
//同步方法会阻塞线程直到js执行完毕
//Object o = javascriptExecutor.executeScript("alert(1)");
Object o = javascriptExecutor.executeScript("return $('.t').length;");
System.out.println("执行js方法返回结果 :" + (o == null ? "空" : o.toString()));
//判断页面是否加载完成 complete 为完成
Object readyState = javascriptExecutor.executeScript("return document.readyState;");
System.out.println("页面加载状态:" + readyState);
}
关闭:
private static void quitDriver(){
if(driver != null){
//关闭webDriver
driver.quit();
}
}
main函数:
public static void main(String[] args) {
try {
test();
}catch (Exception e){
e.printStackTrace();
}finally {
quitDriver();
}
}