2016-07-09 2 views
2

을 클릭 할 수있는 링크를 기다리는. WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, id_text)))을 사용한 다음 계속 클릭하면 아무 일도 발생하지 않습니다. 그러나 WebDriverWait이 클릭 가능한 요소를 반환 할 때까지 기다리면 클릭 할 수 있습니다.오른쪽 방법은 내가 다음에 웹 페이지가 셀레늄

more_friends_link = wait_for_id("show_more", driver) 
ActionChains(driver).move_to_element(more_friends_link).click(more_friends_link).perform() 

그리고

more_friends_link = wait_for_id("show_more", driver) 
more_friends_link.click() 

그리고 WebDriverWait 반환 요소 뒤에 추가 기다리면 방법 모두 잘 작동 : 내가 링크를 클릭하는 2 가지 방법을 시도했습니다. 나는 기다리지 않아도되지만 왜 이런 일이 일어나는지 알아 내고 싶습니다. 클릭 메소드가 예외를 던져서 요소가 표시되고 클릭 가능하다고 생각하게하지만 클릭에 응답하지 않습니다.

UPD : 사이트가 디자인을 바꿀 때까지 스크립트가 제대로 작동한다고 언급하는 것을 잊었습니다. 이전에는 링크 텍스트로 볼 수 있었고 클릭은 잘 작동했습니다.

UPD2 : 그래서 현재 내 코드는 다음과 같습니다

more_friends_link = WebDriverWait(driver, 10).until(
     EC.element_to_be_clickable((By.ID, "show_more"))) 
    time.sleep(5) 
    more_friends_link.click() 

내 목표는

+0

클릭하기 전에'driver.execute_script ("arguments [0] .scrollIntoView();", more_friends_link)'를 추가하면 어떨까요? – alecxe

+0

아직 행운이 없다 - 방금 시도 :(요소는 브라우저 창에서 볼 수 있습니다.) –

+2

내가 이해할 수있는 것은 (나는이 시점에서 추측 할 수 있습니다) "더보기"버튼이 비활성화됨을 나타냅니다 현재 페이지/친구 집합이로드되는 동안 비 전통적 방식으로 사용 중지되었을 수 있습니다. 가능한 경우 대상 페이지에 대한 링크를 추가하는 것을 고려해보십시오. 감사합니다 .. – alecxe

답변

1

봅니다

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, id_text))) 

을 대체하는 것이 더 의미있는 무언가로 time.sleep(5)를 대체하는 것입니다

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, id_text))) 
+0

아니, 운이 없다, 불행히도. 그건 그렇고, 클릭 할 수 없다면'click()'메소드가 예외를 던지지 않을까요? –

+0

요소가 발견되었지만 클릭 할 수없는 경우 아무런 예외도 발생하지 않을 것입니다. 단지 아무런 조치도 없습니다. – Andersson

+0

어쨌든 'EC.element_to_be_clickable'로 변경하면 지금까지 도움이되지 않았습니다. –

관련 문제