9

Python で Selenium Webdriver を使用して私がやろうとしていることの説明を次に示します。特定の製品のさまざまなパラメーターを入力として受け取り、それらのパラメーターを使用して製品の価格を出力する Web サイトがあります。1 つを除くすべてのパラメーターを一定に保ち、for ループで 1 つの特定のパラメーターを変化させて、その 1 つの特定のパラメーターに従って価格がどのように変化するかを確認します。パラメータを変更したら、フォームを送信してから、次のように暗黙的に待機します。

submit_btn.click()
driver.implicitly_wait(10)  
driver.find_element_by_name("Buy_Product")
soup=BeautifulSoup(driver.page_source)

パラメータの最初のセットを入力すると、ページはクリアで、「Buy_Product」という名前のボタンが含まれていないため、次の行を使用しています

driver.find_element_by_name("Buy_Product")

そのボタンが表示されるのをコードが待機していることを確認します。これは、抽出したい価格がページに含まれていることを意味します。問題は、パラメーターを変更して新しい価格を取得しようとしたときにループを 2 回通過するときに、「Buy_Product」ボタンが既に存在するため、暗黙的に待機が機能しなくなり、価格に時間がかかる前に前の page_source が必要になる場合があることです。更新されます。トリッキーな部分は、パラメータが異なっていても価格が同じ場合があるため、価格の表示テキストが変更されたかどうかを確認できないことです。time.sleep を使用せずにこれを解決する方法はありますか?

4

2 に答える 2

1

Anuragh27crony の解決策がうまくいかない場合は、jquery が非アクティブになるのを待つことも検討してください。コードはほとんど同じに見えますが、代わりに次の JavaScript 呼び出しを渡します。

ExecuteScript("return jQuery.active == 0")
于 2013-01-31T00:07:53.060 に答える
1

ここの状況はちょっとトリッキーです...わかりません...これが役立つかどうか...でも試してみてください...

私の提案は JavaScript インジェクションです。ここでは、ページが完全にロードされているかどうかを確認し、それまで待機します。(c# コード スニペット)

IWait<IWebDriver> Driver_Wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
Driver_Wait.Until(Driver => ((IJavaScriptExecutor)JS_Driver).ExecuteScript("return document.readyState").Equals("complete"));

これがお役に立てば幸いです....すべてのベスト:-)

于 2012-12-06T06:35:20.007 に答える