はじめに:
あなたの位置は問題ありませんが、直接要素に報告が表示されていない、あなたが考えることができ感じるときプログラムが要素によって引き起こさ速すぎたり遅すぎるページのロードを実行しているためではありません表示されていない、それが待つ追加する必要があり、待ちます要素が再び表示され、プログラムを継続します。
本体:
待つことを余儀なく1.(SLEEP)
待ち時間を設定するための最も簡単な方法は待つことを余儀なくされ、実際には、time.sleep()メソッドは、どんな状況下、一定の休止時間のためのプログラムを実行させない、時間は引き続き実行された後、欠点は、設定時間が短すぎる、インテリジェントではない、要素はまだいませんアウトロード、それはまだエラーになります。時間が長すぎる、それは時間の無駄になり、場合より、数秒に大量のコードをするたびに過小評価していない、秒数は、それが全体のスピードアップに影響を与えます。その可能性として、このように少しを使用します
2.劣性待機(implicitly_wait())
driver.implicitly_wait()、ページは一定期間に読み込みが完了したかどうか、隠された待機時間を設定し、完了した場合、次のステップになり、設定した時間内に完了無負荷、それはタイムアウト負荷を報告しません。
# - * -コーディング:UTF- 8 - * - からセレンwebdriverをインポート インポート時間 ドライバー = webdriver.Chrome() driver.implicitly_wait(20は)劣性#待って最長30秒、 。ドライバーGET(「HTTPS:// www.baidu.com " ) time.sleep(3 ) driver.quit()
欠点は、要素が広くAjax技術を使用して、ページのロード時間は、多くの場合、ローカルであるため、つまり、ページ全体が完全にロードされないとき、それは我々がロードされている必要があり要素とすることができる、スマートではなく、それは必要ですその後、ロード次のステップを実行し、この隠しを満たすために待つことができないためにページ全体を待ちます。
もう一つのポイントは、待っている時間は開始後、劣性グローバル設定されているオフに設定し、プログラムが実行されている有効となります全体のプロセス、ページのロードを待ちます。もう一度時間を設定する必要はありません。
3.支配的な待機(WebDriverWait)
WebDriverWait(ドライバ、 20は、ある し、いくつかの判定条件を支援until_not方法にまたはまで(expected_conditions.presence_of_element_located(ロケータ))、待機モジュールセレンWebDriverWait()メソッド、.until 0.5)、そのようなシナリオを構成することができます。もちろん、素子内に表示されていないかを決定することができるなど、指定された時間であり、目に見えるが、割り当てられた時間を超えるまで待機し続けていない場合、可視停止待機は、タイムアウト例外を報告した場合、ロケータ要素を表示する秒数の各々は、表示されていますそして、それの他の様々なシーンでは、あなたはシーンの実際の状況に基づいて、独自の判断を選択する必要があります。
# - * -コーディング:UTF- 8 - * - からセレンインポートwebdriverを からselenium.webdriver.support.waitインポートWebDriverWait から selenium.webdriver.supportインポートexpected_conditions としてEC からによりselenium.webdriver.common.byインポート ドライバ = webdriverを。 Firefoxの() ドライバ。取得(' https://huilansame.github.io ' ) WebDriverWait(ドライバ、20、0.5 )(.until EC.presence_of_element_located((By.LINK_TEXT、 'CSDN'))) 印刷driver.find_element_by_link_text('CSDN ').get_attribute(' hrefが" ) )(driver.close
条件の数を提供する決定モジュールexpected_conditionsを提供することができます。
selenium.webdriver.support.expected_conditions(モジュール) 検証タイトル基づいて、これら2つの条件の、タイトル着信パラメータを検証することに等しいかdriver.titleに含まれる title_is title_contains パラメータが員渡され、個々の条件が存在するか否かを確認するために、2つの要素このような(By.ID、としてロケータグループタイプ、「キロワット」) 名前が示唆するように、適格な限り負荷要素が出て通過するが、すべての要素を満たさなければならない他の条件は、ジョブが実行ロードさ presence_of_element_located presence_of_all_elements_located 三つの条件要素を確認しています、ロケータのタプルタイプに渡される最初の2つのパラメータ、第3パスWebElement表示されている 第一および第三及びその本質は同じである visibility_of_element_located invisibility_of_element_located visibility_of 条件テキストは、特定の要素に現れる二人テキスト要素が決定される中、判定値要素 text_to_be_present_in_elementの text_to_be_present_in_element_value この状態は、フレームに切断は、ロケータがタプル又は測位モードに直接渡すことができるかどうかを決定することができる:ID、名前、索引またはWebElement frame_to_be_available_and_switch_to_it 警告があるかどうかを決定するためにこの条件が表示され alert_is_present この条件要素のクリック可能かどうか、着信ロケータ element_to_be_clickable この4つの条件は、要素が選択されているか否かを判断する、第1の条件は、着信オブジェクト、第二ロケータ着信タプルWebElement そうでない場合はFALSEを返し、第三の着信オブジェクトと真WebElement状態等しい戻り 第着信ロケータ状態、等しいTrueを返し、そうでない場合はFalseを返す element_to_be_selected element_located_to_be_selected element_selection_state_to_be element_located_selection_state_to_be 要素はDOM、入ってくるWebElementオブジェクトにまだあるかどうかを判断するために最後の条件は、ページリフレッシュするかどうかを決定することができます staleness_ofを