开发依赖
- selenium包
- chromedriver浏览器驱动
- 下载地址:http://chromedriver.storage.googleapis.com/index.html
- chrome版本与chromedriver版本对照表:https://blog.youkuaiyun.com/huilan_same/article/details/51896672
DEMO
// chrome浏览器驱动路径 注意chrome版本与驱动版本的兼容性
String driverPath = "driver/chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverPath);
ChromeOptions options = new ChromeOptions();
// 参数为关闭chrome浏览器提示“Chrome正受到自动测试软件的控制”
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
options.addArguments("disable-infobars");
// 带参数启动Chrome浏览器
WebDriver driver = new ChromeDriver(options);
// 最大化浏览器
driver.manage().window().maximize();
// 进入指定url 注意此处http://不可省略
driver.get("http://www.baidu.com");
// 根据id获取百度内容输入框元素
WebElement searchInputElement = driver.findElement(By.id("kw"));
// 清空输入框
searchInputElement.clear();
// 键入指定搜索内容
searchInputElement.sendKeys("selenium");
// 根据class名获取百度一下点击按钮元素
// 当类名包含空格时不能使用By.className寻找元素,这里改用css选择器
//WebElement searchButtonElement = driver.findElement(By.className("btn self-btn bg s_btn"));
WebElement searchButtonElement = driver.findElement(By.cssSelector("[class='bg s_btn']"));
// 点击指定元素
searchButtonElement.click();
// 等待5s防止点击查询后瞬间关闭页面
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 关闭页面(进程还在)
driver.close();
// 关闭浏览器(进程也会结束)
driver.quit();
常用定位方式
-
driver.findElement(By.id())
略
-
driver.findElement(By.name())
略
-
driver.findElement(By.className())
- 如class名包含空格时使用该方法会报错,请用其他方法定位如cssSelector、xpath
-
driver.findElement(By.xpath())
//
根级/
下一级*
任意元素.
当前节点所在级..
上一级ancestor
祖先节点 包括父parent
父节点prceding-sibling
当前元素节点标签之前的所有兄弟节点prceding
当前元素节点标签之前的所有节点following-sibling
当前元素节点标签之后的所有兄弟节点following
当前元素节点标签之后的所有节点preceding-sibling::*
同级前一个节点的元素following::*
同级后一个节点的元素input[@id='kw']
id为“kw”的input元素input[contains(@class,'kw')]
class名包含有"kw"的input元素button[starts-with(@class,"btn")]
input[ends-with(@class,"-special")]
- 更多详见https://www.w3school.com.cn/xpath/xpath_syntax.asp
-
driver.findElement(By.cssSelector())
input[class='ygtvcell ygtvtp']
class名为“ygtvcell ygtvtp”的input- 更多详见https://www.cnblogs.com/zuodaozhudemeng/p/7487798.html
执行JS脚本,并获取返回值
String script = "return document.getElementById('" + id + "').height;";
JavascriptExecutor j = (JavascriptExecutor) driver;
String res = j.executeScript(script) + "";