当前位置: 首页 > 知识库问答 >
问题:

无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像

艾茂学
2023-03-14

我试图使用AutoIT(控制操作系统弹出窗口)和Selenium Webdriver(打开我试图下载pic的网站)从网站下载图像
我获得操作系统弹出窗口,通过使用AutoIT,我能够发送保存文件的新位置,即,

C:\Users\Casper\Desktop\Resume\Pic.jpg  

但是一旦脚本点击save按钮,pic就会被下载,但名称和默认位置不同。

下面是我正在使用的AutoIT脚本-

WinWait("Save As");
WinActive("Save As");
Sleep(1000);
ControlSetText("Save As","","[CLASS:Edit; INSTANCE:1]","C:\Users\Casper\Desktop\Resume\Pic.jpg");
Sleep(1000);
ControlClick("Save As","","[CLASS:Button; INSTANCE:1]");
Sleep(1000);

Web驱动程序的Java代码-

  import java.awt.AWTException;
  import java.awt.Robot;
  import java.awt.event.KeyEvent;
  import java.io.IOException;
  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.openqa.selenium.interactions.Actions;

 public class Practice {

 public void pic() throws AWTException, IOException, InterruptedException{

     WebDriver driver;
     System.setProperty("webdriver.chrome.driver","E:\\chromedriver.exe");
     driver = new ChromeDriver();
     try{
      driver.navigate().to("http://i.stack.imgur.com/rKZOx.jpg?s=128&g=1");
        Actions action = new Actions(driver);
       action.moveToElement(driver.findElement(By.xpath("/html/body/img"))).perform();
        action.contextClick().perform();
      Robot robo = new Robot();
        robo.keyPress(KeyEvent.VK_V);
      robo.keyRelease(KeyEvent.VK_V);
    // Here i am getting the os window but don't know how to send the desired location
        String command ="C:\\Users\\Casper\\Desktop\\Resume\\Pic.exe";
        Runtime.getRuntime().exec(command);

    }catch(Exception e){
        e.printStackTrace();
        driver.close();
    }//catch
     finally{
         Thread.sleep(6000);
         System.out.println("command");
         driver.quit();
         System.exit(0);
     }
  }//method 

如你所见,它成功地将新地址发送到操作系统窗口弹出窗口(红色圆圈内),但点击保存按钮后,图像将在不同的位置下载C:\用户\Casper\下载(我的默认下载文件夹)名称-rKZOx

共有2个答案

西门威
2023-03-14

也许可以试试这样:

Global $goExplorer = _myExplorerSelectUpload("C:\Users\Casper\Desktop\Resume", "Pic.exe", "Save As")
If @error Then Exit 101

ControlClick(HWnd($goExplorer.hwnd),"","[CLASS:Button; INSTANCE:1]")

Func _myExplorerSelectUpload($szDirectory, $szFileName, $vWndOrTitle, $sText = "")

    Local $oExplorer = _explorerWinFindObj($vWndOrTitle, $sText)
    If @error Then Return SetError(@error, @extended, 0)

    $oExplorer.Navigate($szDirectory)
    If @error Then Return SetError(3, 0, 0)
    ; might try a sleep here if it's rendering too fast

    $oExplorer.document.SelectItem( _
        $oExplorer.document.Folder.ParseName($szFileName), 1 + 4 + 8 + 16)
    If @error Then Return SetError(5, 0, 0)

    ; return the object you're working with
    Return $oExplorer
EndFunc

Func _explorerWinFindObj($vWndOrTitle, $sText = "")

    Local $oShell = ObjCreate("Shell.Application")
    If Not IsObj($oShell) Then
        Return SetError(1, 0, 0)
    EndIf

    Local $oWins = $oShell.windows
    Local $hWnd, $vDummy

    For $oWin In $oWins

        ; browser confirmation - start
        $vDummy = $oWin.type
        If Not @error Then ContinueLoop ; if not/browser

        $vDummy = $oWin.document.title
        If Not @error Then ContinueLoop
        ; browser confirmation - end

        ; bypassed IE windows, now to find window
        $hWnd = HWnd($oWin.hwnd)
        If IsHWnd($vWndOrTitle) Then
            ; hwnd was passed, does it equal hwnd of object
            If $hWnd = $vWndOrTitle Then Return $oWin
        Else
            ; match titles (exact match)
            If WinGetTitle($hWnd) = $vWndOrTitle Then
                ; match text, only in string text match
                If $sText And Not _
                    StringInStr(WinGetText($hWnd), $sText) Then
                    ContinueLoop
                EndIf
                Return $oWin
                ; hwnd to hwnd
            ElseIf WinGetHandle($vWndOrTitle, $sText) = $hWnd Then
                Return $oWin
            EndIf
        EndIf
    Next

    Return SetError(2, 0, 0)
EndFunc
余弘新
2023-03-14

现在我得到了答案。由于我没有等待窗口正确打开,我无法在我想要的位置下载文件。我只是把一个线程等待2秒钟,现在它工作正常,并在所需的位置保存图像。更改的代码是-

其余代码保持不变,以下代码已更改-

  Thread.wait(2000);
   String command ="C:\\Users\\Casper\\Desktop\\Resume\\Pic.exe";
    Runtime.getRuntime().exec(command);

现在我可以在e-drive上保存图片,文件名为pic

 类似资料:
  • 我想将一个文件保存在与应用程序jar文件所在位置相同的文件夹中。我正试图通过以下方式实现这一点: 如果我从Intellij运行项目,返回的路径是,如果我从命令行运行它,返回的路径是。这是应该发生的吗?另外,如何才能将jar路径仅返回到?

  • 问题内容: 我正在使用此代码上传文件(图像到文件夹) 当文件(图像)保存在指定路径时…如果我想用某个所需的名称保存文件…。 我曾尝试更换此 有了这个 但是它不起作用 问题答案: 你可以试试看

  • 从远程url保存位图图像的典型方法(基于研究)是: 我无法保存位图,除非它被压缩(位图总是未压缩)。远程图像大小为32KB,压缩后为110KB。我知道我必须降低压缩参数以获得更小的尺寸,但远程图像经过优化,效率更高。 有没有一种方法可以在不压缩远程图像的情况下将其保存到移动存储上? 我的问题的答案===== 首先,我为误导内容道歉;我只想保存可以是png | jpeg | gif |等格式的图像。

  • 问题内容: 我正在学习OpenCV和Python。我从网络摄像头捕获了一些图像并将其保存。但是默认情况下会将它们保存到本地文件夹中。我想将它们从直接路径保存到另一个文件夹。我如何解决它? 问题答案: ebeneditos提供的解决方案运行完美。 但是,如果您在一段较大的代码段中有多个部分,并且想要更改保存图像的路径,则必须在每次单独出现时更改路径。 正如Soltius所说,这是一种更好的方法。声明

  • 问题内容: 我必须使用下面给出的Selenium Webdriver执行以下任务。 单击任何开始下载任何文件的链接/按钮(文件类型可以是图像,pdf,jar等) 单击弹出窗口上的“保存”(如果显示)(例如http://selenium.googlecode.com/files/selenium-server-standalone-2.33.0.jar) 提供所需的位置以保存该文件。 任何人都可以共

  • 我在openpyxl中保存Excel文件时遇到问题。我正在尝试创建一个处理脚本,该脚本将从一个excel文件中获取数据,并将其转储到一个转储excel文件中,在excel中使用公式进行一些调整后,我将在转储excel文件中保存所有处理过的数据。我目前的代码也是如此。 自从两三周前我刚开始使用Python以来,我知道我的很多代码都很混乱。我还有几个悬而未决的问题,我可以在以后处理。似乎没有很多人为了