Seleniumを含むページを取得しますが、不明な要素の値が空にならないようにします

Nov 23 2020

環境

これは、Seleniumを使用してページを取得するの再投稿ですが、要素値が空にならないように待機します。これは、私が知る限り、有効性なしに閉じられました。

クロージャ推論のリンクされた回答は両方とも、期待されるテキスト値が何であるかを知ることに依存しています。各回答では、WebDriverWait通話にハードコードされた予想テキストが明示的に示されています。さらに、リンクされた回答はどちらも、私の質問の最後の部分にリモートで触れていません。

[期待される条件かどうか]ページの前または後に来るGet

「重複する」質問

  • 次のHTMLからデータを抽出する方法は?
  • 要素内のテキストに特定の部分テキストが含まれているかどうかをアサートします

元の質問

Seleniumを使用してWebページを取得していますが、特定の値が読み込まれるのを待つ必要があります。値がどうなるかはわかりませんが、どの要素に含まれるかだけです。

期待される条件を使用するtext_to_be_present_in_element_valuetext_to_be_present_in_element、最も可能性の高い方法のようですが、これらの使用方法に関する実際のドキュメントを見つけるのに苦労しており、ページの前後にあるかどうかわかりません。

webdriver.get(url)

言い換えると

Seleniumを使用してページを取得し、不明なテキスト値が要素のテキストまたは値に入力されるのを待ってから続行するにはどうすればよいですか?

回答

BBorisov95 Nov 23 2020 at 21:16

私の答えは最善ではないと確信していますが、ここに私自身のコードの一部があり、あなたの質問と同様に私を助けてくれました。

私の場合、DOMの読み込み時間に問題がありました。5秒かかることもあれば1秒かかることもあります。

url = 'www.somesite.com'
browser.get(url)

私の場合browser.implicitly_wait(7)は十分ではなかったからです。for loop コンテンツが読み込まれているかどうかを簡単に確認できるようにしました。

some code...

 for try_html in range(7):
        """ Make 7 tries to check if the element is loaded """
        browser.implicitly_wait(7)
        html = browser.page_source
        soup = BeautifulSoup(html, 'lxml')
        raw_data = soup.find_all('script', type='application/ld+json')
        

       """if SKU in not found in the html page we skip 
         for another loop, else we break the 
          tryes and scrape the page"""

        if 'sku' not in html:
            continue
        else:
            scrape(raw_data)
            break

完璧ではありませんが、試すことができます。