2013-01-25 164 views
1

我想屏幕刮一個網站有多個頁面。這些頁面是動態加載的,無需更改URL。因此我使用硒來篩選它。但我得到這個簡單程序的例外。硒與python網絡爬蟲

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/[email protected]/components/driver_component.js 

是否與給定的URL或Firefox瀏覽器的問題。 如果有人幫助我會很有幫助。

回答

1

我認爲你的主要問題是頁面本身需要一段時間來加載,並且你立即試圖訪問該鏈接(可能還沒有渲染,因此堆棧跟蹤)。你可以嘗試的一件事是使用隱式等待1與你的browser,這將告訴browser等待一段時間元件出現在超時之前。在你的情況,你可以嘗試以下方法,這將等待長達10秒,同時輪詢DOM爲特定項目(在這種情況下,鏈接文本2):

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

我正在開發一個Python這可能包括你的(或他人)模塊使用情況:

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

其轉換記錄硒腳本爬行功能,從而避免任何寫入上面的代碼。它適用於動態加載內容的頁面。我希望有人認爲這很有用。