2017-06-02 14 views
0

websiteからリンクを集めています。時々ウェブサイトに障害が発生し、そのそれが必要のリンクを表示しません...今Selenium - Python要素の検索でタイムアウトを設定する

links = driver.find_elements_by_xpath('//*[contains(@class, "m_rs_list_item_main")]/div[1]/div[1]/a') 

:私はそれを持っているページを反復処理し、各ページに、私はとのリンクを取得します。例えば、それは通常、こう述べています。

リンク1

リンク2

...

リンクN

ページM

そして突然、そこにあるページ、リンクを一切表示していないM + 1としましょう。その後、コードは上記のリンク(links = ...)でリンクを「探している」ことになります。今、私はメッセージ「nolinks」印刷を取得することはありません

if numlinks_inrun == 0: 
    print('nolinks') 

:私はどのように多くのリンク私が持っている各ページで表示するためにはカウンターとのリンクを数えます。私は、端末にプログラムを中止するCTRL + Cを押すと、私はターミナルでトレースバックを得る:私はプログラムは、この時点で立ち往生ことを知っている、なぜ

links = driver.find_elements_by_xpath('//*[contains(@class, "m_rs_list_item_main")]/div[1]/div[1]/a') 
    File "/home/vladimir/anaconda3/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 305, in find_elements_by_xpath 
    return self.find_elements(by=By.XPATH, value=xpath) 

です。誰もがセレンは永遠にそれらの存在しないリンクを検索しないようにタイムアウトを設定する方法を知っていますか?

+2

https://selenium-python.readthedocs.io/waits.html#explicit-waits – Amit

+0

@VladimirVargasこの要求は、セキュリティrules'ときによってブロックされた 'として私はメッセージを取得しています私は[ウェブサイト](http://www.metrocuadrado.com/venta/)にアクセスしようとします。何か別の選択肢がありますか?ありがとうございます。 – DebanjanB

+0

特定のページやページの読み込みに時間がかかるようです。ページのロードタイムアウトを設定できます。私はそれが暗黙的にタイムアウトを設定するまで待つことはありません要素を見つけることができない場合は、暗黙的にデフォルトでは待機しているfind要素のためだとは思わない。 – Murthi

答えて

1

これは、セレンの位置を特定するために時間内に実際にロードされていない要素の問題であるようです。明示的な待機時間を追加することを検討する必要があります。これを使用して、指定されたページ要素を見つける前にセレンの秒数を設定できます。そういうわけで、「nolinks」の出力が間違っているために出力されていないのです。

コンテキスト: https://selenium-python.readthedocs.io/waits.html#explicit-waits

関連する問題