【问题标题】:How to upload a file from a site using Selenium's java inteface如何使用 Selenium java 接口从站点上传文件
【发布时间】:2012-05-09 18:55:36
【问题描述】:

我是 selenium 开发的新手,我需要“抓取”这个页面:

https://annunci.ebay.it/pubblica-annuncio

在这个页面中有一个使用 jquery 上传的图片。我需要在 java 中使用 selenium 做同样的事情。有人可以给我一些建议吗?谢谢!! :)

这是我尝试的:

WebDriver d = new FirefoxDriver();
d.get("https://annunci.ebay.it/pubblica-annuncio");
List<WebElement> elements = d.findElements(By.tagName("input"));
for(WebElement e : elements){
    System.out.println(e.getAttribute("name")); 
}

【问题讨论】:

    标签: java selenium webdriver web-scraping


    【解决方案1】:

    如果我理解您的问题,您想在那里上传文件,对吗?这应该可以解决问题:

    d.findElement(By.id("fileField")).sendKeys("C:\\absolutePath\\toYour\\file.jpg");
    

    这个想法是将文件的路径直接发送到您通常单击以获取模式窗口的元素 - 即 &lt;input type='file' /&gt; 元素。

    因为这些文件上传输入中的大多数都有一些onchange 事件触发器,所以您应该能够触发它们。根据WebDriver FAQ,有一个简单的解决方案,因此您不必手动触发所有这些事件:

    WebDriver 将焦点留在您称为“sendKeys”的元素上。 “onchange”事件只会在焦点离开该元素时触发。作为 这样,您需要移动焦点,也许使用“点击”另一个 元素。

    【讨论】:

    • 在该输入类型文件上,有一个javascript调用“onChange”。如果我运行您的代码,它将在输入中设置路径但不加载方法 onChange,建议?
    • 我很确定电话会触发。但是由于这是一个做得很好的 js,你可以手动调用它:(JavascriptExecutor)d.executeScript("onChangeFileBrowse('fileField')");
    • 我正在这个站点尝试:www3.subito.it/ai/form/0 所以我尝试 ((JavascriptExecutor)d).executeScript("showSpindle();submitImage(image);");但它返回我:线程“main”中的异常 org.openqa.selenium.WebDriverException:null(警告:服务器未提供任何堆栈跟踪信息)
    • 那是不同的:)。做showSpindle(); submitImage(document.getElementById('image'));
    • 我刚刚找到了一个通用解决方案 - 我会将其编辑为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2023-04-01
    • 2013-12-14
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多