2017-01-17 2 views
0

agoda.com에서 데이터를 크롤링하려고합니다. 모든 리뷰를 언어별로 필터링하고 싶습니다. 선택기를 기반으로 계산할 때 요소를 클릭하거나 기다릴 때 프로그램에서 요소가 시간 초과 후 표시되지 않는 예외를 throw합니다. 요소가 보이지 않음 셀레늄

코드는 지금까지

String url = "https://www.agoda.com/en-sg/resorts-world-sentosa-hard-rock-hotel/hotel/singapore-sg.html"; 
driver.get(url); 
try { 
    for (WebElement element: driver.findElements(By.xpath("//*[starts-with(@id, 'language-')]"))) { 
     if (element.getTagName().equalsIgnoreCase("input")) { 
      if (element.findElement(By.xpath("..")).getText().equalsIgnoreCase("english")) { 
       wait.until(ExpectedConditions.visibilityOf(element)); 
       element.click(); 
       break; 
      } 
     } 
    } 
}catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 

노력하고있다 어디서 잘못된 것입니까?

+0

나는'언어'로 시작 id''아무 요소를 볼 수 없습니다. 정확히 원하는 요소를 명확히하십시오. – Andersson

+0

리뷰 필터의 리뷰 언어 섹션을 참조하고 있습니다. language-1은 영어의 체크 박스 ID입니다. –

답변

1

다음 코드를 사용하여보십시오 :

// To find and click on required check-box 
WebElement element = driver.findElement(By.xpath("//div[input[starts-with(@id, 'language-')]/span[text()='English']]")); 
Actions actions = new Actions(driver); 
actions.moveToElement(element); 
actions.click(); 
actions.perform(); 
0

여기에서 무엇이 잘못되었는지, 특히 예외의 실제 복사 붙여 넣기가없는 것은 확실하지 않지만 그 원인 중 하나는 현재 있지만 보이지 않는 요소입니다. 뷰포트에서 표시되지 않거나 표시되지 않을 수 있습니다. '개발자'모드를 지원하는 Chrome과 같은 브라우저에서 페이지를 열면 해당 요소의 속성을보고 확인하거나 반박 할 수 있습니다.

사이드 노트 : • 질문에 대한 전체 정보를 게시하십시오. 정확한 예외, 메시지 및 스택 추적의 몇 줄은 무엇입니까? • 가능하면 "개발자"뷰에서 웹 요소의 세부 정보를 게시하십시오. • Exception을 잡지 마십시오. 특정 예외를 잡으십시오. • 코드 조각을 다시 입력하지 않고 복사하여 붙여 넣으십시오. 실제 코드가 printlkn이라면 더 깊은 문제가 있습니다.

+0

노트 주셔서 감사합니다. 불편을 끼쳐 드려 죄송합니다. 내 코드가 좀 더러워서, 재 타이핑이 더 좋을 것이라고 생각했습니다. 그럼에도 불구하고,'driver.findElements (By.id ("language-1")). size()'를 체크하면, 그것은 나에게 1을 준다. 그러나 그것은 클릭되고있다. –

관련 문제