2017-10-25 4 views
0

私は動的に読み込まれたページの最後にスクロールしようとしています。最後のキーを押すと、より多くのコンテンツをロードしていることを示すgifがロードされます。私はgifが表示されるのを待ってから、目に見えないようにして(ページ外に出ます)、最後のキーをもう一度押します。私はこのコードを使用すると、それは動作しませんし、不可視の待ち時間をタイムアウトする、誰もこれにどのような光を当てることができますか?ベースラインとしてあなたのコードブロックを作る任意のHTMLが存在しない場合にはWebDriverWaitがこのように動作しないのはなぜですか? Pythonセレニウム

while True: 
    wd.find_element_by_xpath('//body').send_keys(Keys.END) 
    try: 
     WebDriverWait(wd, 10, poll_frequency = 0.08).until(
      EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img'))) 
     WebDriverWait(wd, 10, poll_frequency = 0.08).until(
      EC.invisibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img'))) 
    except TimeoutException: 
     break 

答えて

0

、私はあなたに次の変更を示唆している:

  1. をする代わりに、次のようにスクロールダウンしsend_keys(Keys.END)使用Javascriptを使用する:

    wd.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    
  2. デフォルトのポーリング間隔を変更しないで、デフォルトの500msのままにしておきましょう。最後に

    WebDriverWait(wd, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img'))) 
    
  3. 、我々はinvisibility_of_element_locatedを待っている間、私はのように、上記の点を修正すると、あなたの問題が解決されない場合はxpath

    WebDriverWait(wd, 10).until(EC.invisibility_of_element_located((By.XPATH, "//img[@any_of_the_img_attribute='img_attribute_value']"))) 
    
  4. とビット顆粒を得るために、あなたをお勧めします最後の手段は、各スクロール後にWebページがレンダリングされるのを待って、次のscrollが発生するようにハードコアを誘導します。

    while True: 
        wd.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
        try: 
         WebDriverWait(wd, 10).until(
         EC.visibility_of_element_located((By.XPATH, '//*[@id="films"]/div[2]/img'))) 
         WebDriverWait(wd, 10).until(
         EC.invisibility_of_element_located((By.XPATH, '//img[@any_of_the_img_attribute="img_attribute_value"]'))) 
         time.sleep(5) 
        except TimeoutException: 
         break  
    

  • あなたの最終的なコードブロックは次のようになります。

  • 関連する問題