2017-04-07 7 views
0

ここは私のコードです。私がしようとしているのは、すべて ページのすべてのホテル名を「BERLIN、GERMANY」という検索語で印刷することです。 Pycharmの '実行'ボタンを押している間、画面に何も印刷されていません。 誰かが自分のコードで間違いが何であるか把握できますか?Selenium + Python:for ..(ループ)が期待どおりに動作しない

from selenium import webdriver  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support import expected_conditions as EC  
from selenium.webdriver.support.wait import WebDriverWait 

my_list = [] 

driver = webdriver.Chrome("C:\\Python27\\selenium\\webdriver\\chrome\\chromedriver.exe") 

driver.get('http://booking.com') 

driver.find_element_by_css_selector("input#ss").send_keys("BERLIN, GERMANY") 

driver.find_element_by_css_selector("button.sb-searchbox__button").click() 

hotel_name = driver.find_elements_by_css_selector(".sr-hotel__name") 

visible_next=driver.find_element_by_css_selector(".paging-next") 

driver.maximize_window() 

for link in hotel_name: 

     scrap_hotel_name = link.text 

     print (scrap_hotel_name) 

     my_list.append(scrap_hotel_name) 

     while True: 

      click_icon = WebDriverWait(driver, 4).until(EC.visibility_of_element_located([By.LINK_TEXT, 'Next page'])) 

      click_icon.click() 

enter image description here

+0

ありがとうございました@Wondercricket –

+0

これはあなたの 'hotel_name'が空であると思います...あなたは' print(hotel_name) 'を試すことができますか? – Andersson

+0

@Anderssonあなたの答えをありがとう! print(hotel_name)に変更すると、最初のホテル名のセレン値だけが印刷され、2ページ目にはクリックされます。最後の行に –

答えて

0

問題のカップルは、スクリプトのロジックにあります:ループの外に定義された

  1. あなたhotel_name。これは、最初のページだけで要素のリストを1回だけ取得することを意味します。
  2. visible_next変数が定義されていますが、使用していません。
  3. forループインテントの内部whileループは(彼らは最初のページにのみワンス実行されます)forループラインの残りの部分を実行せずに時間が経過した後、「次へ」ボタン時間をクリックする

へのコードの下に試してみてくださいすべてのページからホテル名を取得:Python 2.x

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.wait import WebDriverWait 

driver = webdriver.Chrome() 
driver.get('http://booking.com') 
driver.find_element_by_css_selector("input#ss").send_keys("BERLIN, GERMANY") 
driver.find_element_by_css_selector("button.sb-searchbox__button").click() 
my_list = [] 

while True: 
    WebDriverWait(driver, 5).until(EC.invisibility_of_element_located([By.CSS_SELECTOR, 'div[class^="sr-usp-overlay"]'])) 
    my_list.extend([hotel.text for hotel in driver.find_elements_by_css_selector('.sr-hotel__name')]) 
    try: 
     WebDriverWait(driver, 5).until(EC.element_to_be_clickable([By.CSS_SELECTOR, "*[data-page-next]"])).click() 
    except: 
     break 

[print(hotel) for hotel in my_list] 

for hotel in my_list: 
    print(hotel) 
と最後の行を置き換えます
+0

があると、構文エラーです。 –

+0

私はこれをして、私は同じ問題があります。それは自動的に1-2ページを読み込みます。第2ページでは、それは固まって何も印刷しません。 : 'While ..'の前に 'hotel'を宣言するべきではありませんか? –

+0

* stuck *は何を意味しますか?例外はありますか?コードは 'Python 3.6'で問題なく動作します。 Python 2.7'を使用していますが、正確には動作していないものを知る必要があります。今は '3.6'バージョンしかなく、' 2.7'でコードをチェックできません。 – Andersson

関連する問題