2017-03-07 115 views
0

我試圖用硒解析Upwork並獲得例外如何修復Selenium Webdriver異常ElementNotVisibleException?

異常線程 「main」 org.openqa.selenium.ElementNotVisibleException:

而且我不uderstand原因。我嘗試點擊包含鏈接的h2元素,鏈接本身,但仍得到相同的異常。我在開發工具中檢查這個元素的樣式,這個元素是可見的。

我嘗試使用ExpectedConditions並等待元素變爲可見,但獲取超時異常。我做錯了什麼,以及如何點擊此鏈接?

當然,我可以只使用uri並打開它,但我想解決點擊問題。

System.setProperty("webdriver.gecko.driver", "/usr/local/bin/geckodriver"); 
WebDriver driver = new FirefoxDriver(); 
driver.get("https://www.upwork.com/o/jobs/browse/"); 
List<WebElement> titles = driver.findElements(By.className("job-title")); 
for (WebElement title: titles) { 
    System.out.println("text: " + title.getAttribute("innerText")); 
    System.out.println("tag: " + title.getTagName()); 
    title.click(); 
    driver.navigate().back(); 
} 

回答

1

我不確定你到底想要做什麼,但是如果你試圖颳去網站,讓我告訴你這種方法可能無法正常工作。這些網站配備了識別機器人的功能,稍後或更早它將識別您的代碼,並且您將驗證captcha。

但讓我們來談談你的代碼,它的失敗是因爲元素不可見。這很簡單,可能是因爲可見性標誌是錯誤的或尺寸不可用或其他原因。簡單的修復就是獲得元素,並解決您的問題。

只需添加TODO代碼,此代碼即可運行。

WebDriver driver = new FirefoxDriver(); 
    driver.get("https://www.upwork.com/o/jobs/browse/"); 
    List<WebElement> titles = driver.findElements(By.xpath("//h2/a")); 
    for (int i=0; i<titles.size(); i++) { 
     //TODO add a code to wait until first page loaded 

     //To handle StaleElementReferenceException 
     WebElement title = driver.findElements(By.xpath("//h2/a")).get(i); 
     System.out.println("text: " + title.getAttribute("innerText")); 
     System.out.println("tag: " + title.getTagName()); 
     title.click(); 
     driver.navigate().back(); 
    } 
+0

我嘗試收集一些關於大多數所需工作的統計數據,並且與我最相關。 – Hayate

+0

@Hayate如果它工作的很好,我所說的是,如果你會更頻繁地運行捕獲將出現。 –

+0

據我所知,我添加聲音通知的情況下,當我遇到了解決方案,所以我解決captch manualy時,在需要。 – Hayate

相關問題