2013-01-25 8 views
1

여러 페이지가있는 웹 사이트를 스크랩 (scrape)하려고합니다. 이러한 페이지는 URL을 변경하지 않고 동적으로로드됩니다. 그래서 셀레늄을 사용하여 화면을 긁어냅니다. 그러나 나는이 간단한 프로그램에 대한 예외를 얻고있다.셀레늄 (파이썬 웹 크롤러 포함)

raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"2"}' ; Stacktrace: Method FirefoxDriver.prototype.findElementInternal_ threw an error in file:///tmp/tmpMJeeTr/extensions/[email protected]/components/driver_component.js 

가 주어진 URL 또는 파이어 폭스 브라우저의 문제 그 것이다 다음과 같이

import re 
from contextlib import closing 
from selenium.webdriver import Firefox 

url="http://www.samsung.com/in/consumer/mobile-phone/mobile-phone/smartphone/" 

with closing(Firefox()) as browser: 
    n = 2 
    link = browser.find_element_by_link_text(str(n)) 
    link.click() 
    #web_page=browser.page_source 
    #print type(web_page) 

오류입니다. 누군가 나를 도왔다면 큰 도움이 될 것입니다.

답변

1

주요 문제는 페이지 자체가로드되는 데 시간이 걸리고 즉시 링크 (아직 렌더링되지 않았으므로 스택 추적)에 액세스하려고한다는 것입니다. 당신이 시도 할 수있는 한가지는 browser과 함축적 인 대기 1을 사용하는 것입니다. 이것은 browser에게 시간이 초과되기 전에 요소가 나타날 때까지 일정 시간 동안 기다릴 것을 말합니다. 나는 파이썬을 개발하고 있어요

browser.implicitly_wait(10) 
n = 2 
link = browser.find_element_by_link_text(str(n)) 
link.click() 
#web_page=browser.page_source 
#print type(web_page) 
+0

답장을 보내 주셔서 감사합니다. – Dhatri

+0

@vindhya 전혀 문제 없습니다. 행운을 빈다. – RocketDonkey

1

: 귀하의 경우에, 당신은 폴링 특정 항목에 대한 DOM (이 경우, 링크 텍스트 2) 동안 최대 10 초 동안 기다리 것이다 다음을 시도해 볼 수도 있습니다 귀하 (또는 다른 사람의)를 포함 할 수 모듈은 케이스를 사용

그것은 따라서 위의 코드 중 하나를 쓰기 방지 크롤링 기능에 셀레늄 스크립트를 기록 변환합니다

https://github.com/cmwslw/selenium-crawler

. 콘텐츠를 동적으로로드하는 페이지에서 효과적입니다. 누군가가 이것을 유용하게 찾길 바랍니다.