1

複数のページがあるWebサイトをスクリーンスクレイピングしたい。これらのページは、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)

エラーは次のとおりです

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/fxdriver@googlecode.com/components/driver_component.js 

指定されたURLに問題がありますか、それともFirefoxブラウザに問題がありますか。誰かが私を助けてくれたら、とても助かります。

4

2 に答える 2

1

あなたの主な問題は、ページ自体の読み込みに時間がかかり、すぐにそのリンクにアクセスしようとしていることだと思います(おそらくまだレンダリングされていないため、スタックトレースです)。試すことができることの1つは、でImplicit Wait 1を使用することです。これにより、がタイムアウトする前に、要素が表示されるまで一定時間待機browserするように指示されます。browserあなたの場合、次のことを試すことができます。これは、特定のアイテム(この場合はリンクテキスト2)のDOMをポーリングしている間最大10秒待機します。

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)
于 2013-01-25T06:38:37.147 に答える
1

私はあなた(または他の人)のユースケースをカバーするかもしれないPythonモジュールを開発しています:

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

記録されたセレンスクリプトをクロール関数に変換するため、上記のコードの記述を回避できます。コンテンツを動的にロードするページでうまく機能します。誰かがこれがお役に立てば幸いです。

于 2013-05-05T19:11:01.003 に答える