2017-01-12 2 views
1

私が実行したいウェブページには、さまざまなニュース記事へのリンクのリストがあります。スクリプトでは、ドライバがリンクをクリックし、 "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) 
+0

は、すでにクリックした後に表示されるようにH1を待っている –

+0

'art'は、新しいタブをクリックしたリンクであり、記事ページが開きます。したがって、2回目の待機は別のウィンドウです。 –

答えて

0

てみてくださいより5秒):

fp = webdriver.FirefoxProfile() 
fp.set_preference("http.response.timeout", 5) 
fp.set_preference("dom.max_script_run_time", 5) 
driver = webdriver.Firefox(firefox_profile=fp) 

また、試してみてください

driver.switch_to_window(driver.window_handles[1]) 
driver.execute_script('window.stop();') 
title = wait.until(EC.visibility_of_element_located((By.TAG_NAME, 'h1'))) 

が、私は、このアプローチについてはよく分からない...あなたのコード内の

+0

これはうまく動作していないように見えますが、テキストが表示されない理由は正しいとは思いません。私は別のスクリプトでそのページを分離し、 'title'と' title.text'を印刷しましたが、何らかの理由でテキストが空白になっています。 –

+0

ロケータが広すぎます。ページ上に最初の 'h1'要素が必要ですか?多分隠れた 'h1'や空のものがあるでしょうか? – Andersson

関連する問題