2

私はSeleniumでWebサイトをナビゲートするためのコードを書いています(私たちのWebサイトをテストする前の練習として)。3つの個別のドロップダウンメニューで値を繰り返し処理し、製品データを含む最終ページを取得しようとしています。

これまでのところ、最初の最初のメニューからのデータと2番目のメニューからの関連データを印刷できますが、最初のメニューによって作成されたリストの最初の要素についてのみです...それはおそらく理解するのが難しいので、この例を検討してください:

DropdownAには次の値が含まれます。

あいうえお

「A」を選択すると、DropdownBに次の値が入力されます。

1 2 3

私の目標は、ツリー全体をカバーして値を返すことです。

A-1,2,3

B-2,3,4

C-3,4,5

戻った後の私のスクリプト爆弾:

A-1,2,3

これが私のコードの例です:

from pyvirtualdisplay import Display
from selenium import webdriver
import time

display = Display(visible=0, size=(1024, 768))
display.start()
driver = webdriver.Firefox()
url = 'http://www.website.com'

driver.get(url)
driver.find_element_by_id('ctl00_ContentPlaceHolder1_pc_selector_selMake').click()
make_list = driver.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_pc_selector_selMake option')
for raw_make in make_list:
    if 'Select' in raw_make.text:
        continue
    make = raw_make.text
    print make
    raw_make.click()
    time.sleep(1)

    model_list = driver.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_pc_selector_selModel option')
    for raw_model in model_list:
        if 'Select' in raw_model.text:
            continue
        model = raw_model.text

        print ' ', model

driver.close()
display.stop()

正確なエラーは次のとおりです。selenium.common.exceptions.StaleElementReferenceException: Message: u'Element is no longer attached to the DOM'

私はSeleniumを初めて使用するので、これがばかげた質問である場合は、ご容赦ください。私は、頭に浮かぶすべてのものを試してみること、またはオンラインで読んだものの何も役に立たなかったことを認めるよりも多くの時間を費やしてきました(私が遭遇した例のほとんどはJavaで書かれているためです。 mはJavaの男ではありません...)。

ヘルプ、提案、解決策、リソースなどは大歓迎です。

前もって感謝します!

4

1 に答える 1

3

最終的には、繰り返し処理しているDOM要素が存在しなくなったように聞こえます。どうしてこれが起こるのでしょうか?この問題は次の場合に発生すると思います。ドロップダウン内のすべてのタグを次のように呼び出しています。

driver.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_pc_selector_selMake option')

次に、各タグを繰り返し処理して、それぞれをクリックします。私の最善の推測は、ドロップダウンがクリックされるたびに再生成される可能性があるため、繰り返し処理しているオブジェクトが無効になることです。したがって、最初の反復は成功しますが、その後のすべての反復は失敗します。

お役に立てれば!

于 2012-10-11T16:29:27.047 に答える