public static void main(String[] args) throws IOException, TesseractException, InterruptedException {
System.setProperty("webdriver.chrome.driver","D:\\driver\\chromedriver_win32\\chromedriver.exe")
WebDriver driver=new ChromeDriver()
File file=new File(OciUtils.imgPath,"38-HN.jpg")
String userName="4301025320"
String passWord="12345678"
String url="http://b2bsale.bbg.com.cn/views/business/goods_search.xhtml?cateId=500201&cataLevel=3&fullCode=.50.5002.500201."
driver.get("http://b2bsale.bbg.com.cn/login.xhtml")
driver.manage().window().maximize()
String code = getCode(driver, file)
System.out.println(code)
WebElement user = driver.findElement(By.id("loginForm:user"))
WebElement psd = driver.findElement(By.id("loginForm:psd"))
WebElement verifyCode = driver.findElement(By.id("loginForm:verifyCode"))
setAttribute(user,driver,"value",userName)
setAttribute(psd,driver,"value",passWord)
setAttribute(verifyCode,driver,"value",code)
WebElement login = driver.findElement(By.id("loginForm:loginBtn"))
login.click()
Thread.sleep(3000)
driver.get(url)
Thread.sleep(2000)
WebElement li = driver.findElement(By.cssSelector(".u-pagination-centered > li:last-child"))
Integer pageTotal=getPageTotal(li.getText())
Integer pageNo=1
while (pageNo<pageTotal){
WebElement pageNoElement = driver.findElement(By.cssSelector(".no-border-left > span"))
pageNo=Integer.parseInt(pageNoElement.getText())
System.out.println(pageNo)
List<WebElement> elements = driver.findElements(By.className("m-produce-list-info"))
for (WebElement element : elements) {
WebElement urlElement = element.findElement(By.tagName("a"))
System.out.println(urlElement.getAttribute("href"))
System.out.println(getProductCode(urlElement.getAttribute("href")))
}
if(pageNo<pageTotal){
WebElement nextElement = driver.findElement(By.id("goods-info-form:j_idt281"))
nextElement.click()
Thread.sleep(1000)
}
}
}
public static String getProductCode(String s){
String startStr="code="
int index = s.indexOf(startStr)
return s.substring(index+startStr.length())
}
public static int getPageTotal(String result){
char[] chars = result.toCharArray()
StringBuilder sb=new StringBuilder()
int numberIndex=-1
for (int i = 0
if(chars[i]>='0' && chars[i]<='9'){
if(numberIndex==-1 && chars[i]=='0'){
continue
}
numberIndex=i
sb.append(chars[i])
}else if(numberIndex!=-1){
break
}
}
return Integer.parseInt(sb.toString())
}
public static void setAttribute(WebElement e, WebDriver d, String attributeName, String value) {
JavascriptExecutor js = (JavascriptExecutor) d
// 执行JavaScriptdiamante修改页面元素属性。arguments[0]-[2]后面会用e,attributeName,value替换并执行
js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", e, attributeName, value)
}
public static void setText(WebElement e, WebDriver d, String value){
JavascriptExecutor js = (JavascriptExecutor) d
js.executeScript("arguments[0].value= arguments[1]", e, value);
}
public static String getCode(WebDriver driver ,File file) throws IOException, TesseractException, InterruptedException {
String code=null;
String matche="\\d{4}";
while (code==null || !Pattern.matches(matche,code)){
WebElement element = driver.findElement(By.cssSelector("span > img"));
if(code!=null){
WebElement element1=driver.findElement(By.id("loginForm:j_idt21"));
element1.click();
Thread.sleep(1000);
element=driver.findElement(By.cssSelector("span > img"));
}
notFullScreen(driver,element,file);
code = OciUtils.getImageInteger(file,true,0.5,0.79);
System.out.println(code);
}
return code;
}
public static void notFullScreen(WebDriver driver,WebElement element,File file) {
File screen = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
BufferedImage read = null;
try {
read = ImageIO.read(screen);
int height = element.getSize().getHeight();
int width = element.getSize().getWidth();
java.awt.Rectangle rect = new java.awt.Rectangle(width, height);
Point p = element.getLocation();
//返回由指定的矩形区域定义的子图像
BufferedImage img = read.getSubimage(p.getX(), p.getY(), rect.width, rect.height);
//使用支持给定格式的BufferedImage写入图像到 File
ImageIO.write(img, "png", screen);
FileUtils.copyFile(screen,file);
} catch (IOException e) {
e.printStackTrace();
}
}