最近用到的做个记录
1. java爬虫客户端常用
driver.get("");
driver.findElement(By.xpath("")).click();
WebDriverWait webDriverWait = new WebDriverWait(driver, 180);
webDriverWait.until(ExpectedConditions.urlToBe(""));
webDriverWait.until(ExpectedConditions.urlContains(""));
2. Selenium新窗口跳转
点击按钮打开一个新的网页,driver跳转到新的页面上
String currentHandle = driver.getWindowHandle();
Set<String> handles = driver.getWindowHandles();
String windowTitle = driver.getTitle();
for (String handle : handles) {
if (!currentHandle.equals(handle)){
driver.switchTo().window(handle);
}
}
3. 等待当前页面加在到标签
webDriverWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("")));
4. 取出标签ul下的所有li标签,遍历li标签取出包含“设立”的li标签
List<WebElement> liElements = driver.findElements(By.xpath("/html/body/div[10]/ul/li[2]/ul/li"));
liElements.stream().filter(l->l.getText().contains("设立")).collect(Collectors.toList()).get(0).findElement(By.xpath("div[2]/a[1]")).click();
5. 获取当前页面的Cookie
Set<org.openqa.selenium.Cookie> cookies = driver.manage().getCookies();
for (org.openqa.selenium.Cookie next : cookies) {
Cookie cookie = new Cookie(next.getDomain(), next.getName(), next.getValue(), next.getPath(), next.getExpiry(), true);
webClient.getCookieManager().addCookie(cookie);
}
获取Cookie主要用于后续走服务端访问页面放在请求头里面,有的页面还需要自定义拼接Cookie。
关于切换窗口的
-
Selenium切换窗口driver.switchTo().window(handle) -
selenium–driver.switchTo()
关于ExpectedConditions 的用法
- Selenium 中ExpectedConditions 用法说明(最全整理)
6. 获取当前时间戳—new Date().getTime()
System.out.println(new Date().getTime());
7. 获取一个随机小数—Math.random()
System.out.println(Math.random());
8. 解决响应信息乱码
String str = data.getString("formSchema");
String formSchema = new String(str.getBytes("ISO-8859-1"),"UTF-8");
9. net.sf.json.JSONObject 放入空值null
在使用net.sf.json.JSONObject的过程中,发现net.sf.json.JSONObject 放入空值后,结果在对象里连空值的KEY都找不到。而这里希望即便是空值,KEY也予以保留。
这里的空值不是“”也不是“null”——是null jsonObject.put(“nullobj”, null); 在JSONObject中存放一个value值为null时,,JSONObject默认就不会把key添加进去了,会引起数据丢失。
利用JSONNull.getInstance()可以很好的解决这个问题
jsonObject.put("nullobj", JSONNull.getInstance());
10. BigDecimal类型做运算
BigDecimal jcbl1 = list1.getBigDecimal("jcbl");
BigDecimal proportin = jcbl1.multiply(new BigDecimal(0.01)).setScale(2, BigDecimal.ROUND_DOWN);
BigDecimal jcbl = userInfo.getBase().multiply(proportin).setScale(0, BigDecimal.ROUND_UP);
BigDecimal jcbl2 = jcbl.multiply(new BigDecimal(2)).setScale(0, BigDecimal.ROUND_UP);
|