私が実行したいウェブページには、さまざまなニュース記事へのリンクのリストがあります。スクリプトでは、ドライバがリンクをクリックし、 "h1"要素が読み込まれるのを待ち、その要素のテキストをチェックして、異なるキーワードを探して正しいページであることを確認します。しかし、ニュース記事のページの1つは、ページを調べるときに明らかにそこにあるにもかかわらず、 "h1"要素を見ることができません。ページが常にリフレッシュされている場合、どのように要素をWebドライバに表示させることができますか?
このページには、ページをヒットしたときに自動的に再生される複数の動画と広告があります。このため、常にページがリフレッシュされ、タイムアウトの原因となる読み込み時間が「h1」になりません。私の質問は、負荷を停止するか、ページが別の要素が読み込まれるのを待つことによって、この "h1"要素が見えるようにする方法があるかどうかです。私は解決策を使い果たしました。リンクをループするコードスニペットを次に示します。
from selenium.webdriver.common.keys import Keys
driver.switch_to_window(driver.window_handles[1])
wait.until(EC.presence_of_element_located((By.TAG_NAME, 'body'))).send_keys(Keys.ESCAPE)
title = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'h1')))
もう一つの方法は、例えば、ページの読み込みの制限(、ないより多くを設定するFirefox
+ FirefoxProfile
を使用することです:ページのロードを中断し、私はすべての問題の場合に知らせるコードの下
for headline in list_of_headlines:
print "'" + headline + "'"
art = wait.until(EC.presence_of_element_located((By.LINK_TEXT, headline)))
art.click()
driver.switch_to_window(driver.window_handles[1])
title = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'h1')))
print title.text.lower()
if "KEYWORD".lower() in title.text.lower():
print "Match"
elif "KEYWORD".lower() in title.text.lower():
print "Match"
elif "KEYWORD".lower() in title.text.lower() or "KEYWORD".lower() in title.text.lower():
print "Match"
elif "KEYWORD".lower() in title.text.lower():
print "Match"
else:
print "Wrong Page"
driver.close()
driver.switch_to_window(d.main_window)
は、すでにクリックした後に表示されるようにH1を待っている –
'art'は、新しいタブをクリックしたリンクであり、記事ページが開きます。したがって、2回目の待機は別のウィンドウです。 –