2017-03-07 58 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

相关问题