使用WebDriver模拟人工浏览器操作,可以实现完美的模拟操作,躲避大部分反爬虫机制。这里,再简单的介绍下常用的输入框填写模拟的方法。
1. 使用WebElement SendKeys方法
具体代码如下
Test
public void testSelenium() throws InterruptedException {
System.getProperties().setProperty("webdriver.chrome.driver", "D:\\DevelopTools\\casper\\chromedriver.exe");
Map<String, Object> contentSettings = new HashMap<String, Object>();
contentSettings.put("images", 2);
Map<String, Object> preferences = new HashMap<String, Object>();
preferences.put("profile.default_content_settings", contentSettings);
DesiredCapabilities caps = DesiredCapabilities.chrome();
caps.setCapability("chrome.prefs", preferences);
WebDriver webDriver = new ChromeDriver(caps);
webDriver.get("https://www.baidu.com/");
System.out.println(webDriver.getPageSource());
WebElement inputElem = webDriver.findElement(By.id("kw"));
System.out.println("execute javascript ...");
inputElem.sendKeys("110中文");
Thread.sleep(10000);
webDriver.close();
}
对应的网页是百度搜索首页,选定其搜索框(id=kw),然后使用inputElem.sendKeys(“110中文”)即可。
2. 使用JavascriptExecutor或者RemoteWebDriver执行js脚本,模拟脚本输入
基本如上述代码,具体使用JavascriptExecutor方式如下
((JavascriptExecutor) webDriver).executeScript("arguments[0].value=\"110中文\"", inputElem);
当然,也可以直接使用js定位特定的文本框,如
((RemoteWebDriver) webDriver).executeScript("document.getElementById('kw').value='110中文'", null);
我们使用的时候会注意到,比较旧版本的chrome并不支持中文输入,这个需要调整版本才能支持;我实验成功的版本是49.0.2623.112 m
版本,经过测试31大版本号开始就可以支持了,30版本不行。
其他输入方式后续逐步补充更新。。。