私はPythonとWebdriverを使用して、ユーザーがページをスクロールダウン(遅延読み込み)するとコンテンツを動的に読み込むページからデータをスクラップします。私は合計30のデータ要素を持っていますが、最初にスクロールダウンすることなく15だけが表示されます。PythonでPhantomJSをスクロールしている間に遅延読み込み要素を見つける
# Get All Data Items
all_data = self.driver.find_elements_by_css_selector('div[some-attribute="some-attribute-value"]')
# Iterate Through Each Item, Get Value
data_value_list = []
for d in all_data:
# Get Value for Each Data item
data_value = d.find_element_by_css_selector('div[class="target-class"]').get_attribute('target-attribute')
#Save Data Value to List
data_value_list.append(data_value)
私はChromeDriverを使用して、上記のコードを実行すると:私は私の要素を見つけ、それぞれの要素がロードされるまで、ページの下部に複数回スクロールした後、次のようにそれらの値を取得しています
私の画面上にブラウザのウィンドウを残したまま、私はdata_value_list
を設定するために30個のデータ値をすべて取得します。 ChromeDriverを使用して上記のコードを実行すると、ウィンドウが最小化され、私のリストdata_value_list
には最初の15個のデータ値が入力されます。
PhantomJSを使用しているときに同じ問題が発生し、data_value_list
をページ上の最初に表示されたデータ値のみに制限しています。
PhantomJSを使用している間、ブラウザーを最小限に抑えながら、理想的にはこれらのタイプの要素をロードすることはありますか?
注:アクションチェーンを使用して、計算された回数だけ次のアプローチ.send_keys(Keys.PAGE_DOWN).perform()
を使用してスクロールしています。
答えていただきありがとうございます。私はかなり効率的にスクロールを停止するかどうかの判断に対応できると思います。あなたは「スクロール可能なコンテンツ」の意味をさらに詳しく説明してもらえますか?読み込んでいる追加のhtml要素を参照していますか?だから、私は基本的に最後のものを見つけてそれにスクロールし、最後の1つをスクロールして見つけて、最後の要素に達するまで繰り返します。 – theeastcoastwest
"スクロール可能なコンテンツとは、追加要素ではなく、要素を保持しているスクロール可能な*コンテナ*を意味します。上記のコードは、最後の要素で使用しようとすると機能しません。 – eliotn
ああ、私は今、理解していると信じています。私は今私のコンピュータからしばらく離れていますが、私はそのアプローチを試みます。 – theeastcoastwest