Selenium を使用してページ内のリンクをループするコード スニペットがあります。高速化を試みるために (50 ページを実行しているため)に置き換えTime.sleep(3)
ましたが、WebDriverWait()
動作させることができません。何らかの理由implicitly_wait(30)
で、トリックを行いません。
ドライバーが xpath で要素を見つけることができないため、変数「elems」を宣言しようとすると、コードが古い要素参照エラーを生成しますTime.sleep()
。WebDriverWait()
ここで使用した WebDriverWait() はその問題を解決しますが、コードは別の問題に遭遇します。ネストされた for ループの最後の行で、別の古い要素参照エラーがスローされます。WebDriverWait() がコードを進行させるときに要素が読み込まれますが、これらの要素の属性は必ずしも準備ができているとは限りません。
私の目的はコードをできるだけ速くすることなので、 Time.sleep(10) などはあまり魅力的ではありません。続行する前に、すべての要素とその属性がロードされていることをスムーズに確認するにはどうすればよいですか? そして、implicitly_wait(30) がこの問題を解決しないのはなぜでしょうか?
編集: 問題の URL: http://www.oddsportal.com/baseball/usa/mlb-2017/results/#/page/1/からhttp://www.oddsportal.com/baseball/usa/mlbへ-2017/結果/#/page/50/
PageRange = range(1, 50)
for page in PageRange:
URL = "http://www.oddsportal.com/baseball/usa/mlb-" + season + "/results/#/page/" + str(page) + "/"
driver.get(URL)
tryElement = EC.presence_of_element_located((By.XPATH, "//a[@href]"))
WebDriverWait(driver, 30).until(tryElement)
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
#This line I can't get not to throw a stale element reference
link = elem.get_attribute("href")