文件上传
1,编辑
首先提前下载好AutoIT,先了解https://blog.csdn.net/weixin_39218743/article/details/87808776
手上没有带上传文件的网址,先用百度的上传照片吧!
打开AutoIT工具组件中的脚本编辑器sciTE Script Editor
WinWaitActive("打开")
Send('D:\img\11.jpg')
Sleep(2000)
Send("{ENTER}")
Send("{ENTER}")
注:
a:WinWaitActive("打开")
该命令用于激活通过selenium点击上传按钮打开的Windows窗口
所传的参数为打开的Windows窗口名:“文件上传“,“File Upload”,我这里是“打开”
b:Send("文件地址") -> 使用Send命令指定上传的具体文件
Send命令的参数需要是所上传文件的全路径
c:Sleep(2000) -> AutoIT脚本执行暂停2秒
注:单位是毫秒,对于上传文件过大需要一定时间的需要加一个合适的暂停时间
d: Send("{ENTER}")
Send("{ENTER}")
使用Send命令发送键盘回车(Enter)操作,相当于点击Windows窗口中的“打开”按钮
注:如果你的输入法默认是中文的,则需要像上例中一样写两行Send("{ENTER}"),第一行确认你的输入,第二行相当于点击“打开”按钮,如果是英文的输入法,则只需要一行即可。
2.将保存的AutoIT脚本转为化Selenium可以调用的exe文件
3.在Selenium中通过一个简单的语句调用上面的upload.exe文件,把控制权交给了AutoIt
System.setProperty("webdriver.chrome.driver", ".\\tools\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.get("https://www.baidu.com/");
driver.findElement(By.xpath("//*[@id=\"form\"]/span[1]/span")).click();
driver.findElement(By.xpath("//*[@id=\"form\"]/div/div[2]/div[2]/input")).click();
Runtime.getRuntime().exec("D:\\upload.exe");
文件下载
结合Robot,Actions,Js处理
打开此工具AutoIt Window Info,利用此工具来识别Windows控件信息,如输入框、按钮等。用鼠标拖住工具上的Finder Tool的图标(即图中风扇)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分。
driver.get("https://www.autoitscript.com");
WebElement ele=driver.findElement(By.xpath("//*[@id=\"menu-item-207\"]"));//确定对象,鼠标滑动到此位置
Actions action=new Actions(driver);
action.moveToElement(ele).perform();
driver.findElement(By.xpath("//*[@id=\"menu-item-209\"]")).click();//点击下载链接
WebElement download=driver.findElement(By.xpath("//*[@id=\"post-77\"]/div/table[2]/tbody/tr[1]/td[2]/a/img"));
JavascriptExecutor js=(JavascriptExecutor)driver;
js.executeScript("arguments[0].scrollIntoView(true);", download);
action.moveToElement(download).contextClick().build().perform();
Robot robot=new Robot();
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyRelease(KeyEvent.VK_DOWN);
Thread.sleep(1000);
robot.keyPress(KeyEvent.VK_ENTER);
File srcLoad=new File("d:\\1.png");
File scrFile= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, srcLoad);
}catch(IOException e) {
System.out.print("can't save");
e.printStackTrace();
}finally {
System.out.print("finished");
}
Runtime.getRuntime().exec("D:\\upload.exe");
Thread.sleep(2000);
效果图如下(相类似,自己没录制)