2014-01-22 5 views
2

Im 대화 형 웹 크롤러를 만들려면 Python + Selenium + Splinter + Firefox를 사용하십시오.Python의 Firefox + Selenium : 대화식으로 요소 html을 가져 오는 방법은 무엇입니까?

python 스크립트가 옵션을 제공하면 Selenium이 Firefox를 열고 일부 명령을 보냅니다.

지금 당장 파이썬 스크립트에서 사용자가 상호 작용하려는 웹 요소를 알게해야합니다.

내가 현재 사용하는 방법은 다음과 같습니다

마우스 오른쪽 단추로 클릭 클릭 파이어 폭스 관리자에서 클릭, 클릭 ' 요소를 검사', 웹 사이트 (파이어 폭스)에서 항목을 '복사 HTML '이면 스크립트에 직접 입력하면 계속 진행할 수 있습니다.

그러나 분명히 나는이 과정이 완벽하다고 생각합니다.

저는 자바 스크립트에 대해 아무 것도 모르지만, other questions을 읽고 나면 실제로 자바 스크립트가 해결책이 될 수 있다고 생각합니다.

스플린터는 이론적으로, 자바 스크립트를 실행하고 파이썬 스크립트에 반환 값을 선택할 수 있습니다, 그래서 :

은 다음 요소의 HTML 코드를 반환 자바 스크립트 코드를 실행할 수 있을까 사용자가 클릭 ? 따라서 이름이 인 경우 원하는 요소를 마우스 오른쪽 버튼으로 클릭 할 수 있습니까? 아메이의 코멘트


명확화 :

파이썬 스크립트는 여전히 스크립트에서 유지되는 제어 파이어 폭스 창을 엽니 다. 그리고 splinter로 javascript 코드를 실행하고 완료/정보를 반환 할 때까지 기다릴 수 있습니다. 이것은 파이썬 스크립트가 소유하고있는 Firefox 창을 클릭하거나 마우스 오른쪽 버튼으로 클릭하도록 요청할 수 있으므로 사용자가 클릭하는 요소를 "잡을"자바 스크립트를 시작하는 것이 목표입니다.

자바 스크립트가 원하는 요소를 잡아낼만큼 충분합니까?

+1

자바에서는 여전히 "다음 원하는 요소"를 찾아 Selenium에서 사용할 수있는 식별자를 반환해야합니다. 귀하의 질문에 대한 이해에서 JS 또는 Selenium을 사용하여 페이지의 전체 HTML을 검색하고 HTML 구문 분석기를 사용하여 구문 분석하고 필요한 것을 다듬을 수 있습니다. – Amey

+0

답변 해 주셔서 감사합니다.나는 상황이 명확하다는 것을 확신하지 못했기 때문에 설명을 확장했다. 전체 HTML을 검색하고 결과 코드를 파싱하면 사용자가 원하는 요소를 클릭하여 해당 코드를 ID, 이름, CSS 등을 통해 구체적으로 검색하지 않고 직접 사용할 수 있습니다. –

+0

이것은 다른 컨텍스트에서도 비슷하게 보입니다 : http://stackoverflow.com/questions/17157342/pure-js-detect-if-im-clicking-an-element-within-an-element 내 코드에 적응해야하는 솔루션? –

답변

1

이것은 흥미로운 질문이었습니다. 내 전략은 자바 스크립트를 사용하여 대상 요소에 리스너를 추가하는 것이 었습니다. 어떤 유형의 요소를 지정하지 않았으므로 링크를 사용했습니다. 이것은 쉽게 적응할 수 있습니다.

요소를 클릭하면 지정한 ID로 새 페이지 요소가 만들어지고 관련 정보가 value 특성으로 설정됩니다.

그러면 driver.implicitly_wait을 설정했다고 가정하면 요소가 나타날 때까지 기다릴 수 있습니다.

driver.execute_script("for(var i = 0; i < document.links.length; i++){document.links[i].onclick = function clicked(){var e = document.createElement('a'); e.setAttribute('id','myUniqueID'); e.setAttribute('value', this); document.getElementsByTagName('body')[0].appendChild(e);};}") 

clicked = driver.find_element_by_id('myUniqueID').get_attribute('value') 
+0

놀라운! 테스트하고 작동하여 질문을 정확하게 해결합니다! 내 의도는 웹 사이트의 모든 항목에 사용하는 것입니다. 나중에 해당 동작을 재현 할 수 있기 때문에 (한 번 작업을하고 스크래퍼가 자동으로 만들어 짐 =) 문서의 모든 항목을 일치시켜야하지만 적응이 필요합니다. 방금 공유 한 스크립트를 만드는 것과 비교하면 농담이 될 것입니다. 감사! –

+0

당신이 제공 한 스크립트를 편집하여 문서의 모든 요소를 ​​포함 시켰지만 그 중 일부를 클릭하지 못했습니다. 무슨 일이 일어나고 있는지 알려주시겠습니까? 그것의 여기에서 : http://stackoverflow.com/questions/21316003/how-to-capture-any-element-where-the-user-clicked-with-javascript –