Selenium+Python: for.. (loop) doesn't work as expected -


here code. trying print hotel names in pages search term "berlin, germany". while press 'run' button in pycharm there nothing printed in screen. can figure out mistake in code?

from selenium import webdriver     selenium.webdriver.common.by import     selenium.webdriver.support import expected_conditions ec     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()  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

there couple of issues in logic of script:

  1. your hotel_name defined out of loop. means gets list of elements once- on first page only;
  2. your visible_next variable defined, don't use it;
  3. the while loop inside for loop intents click "next" button time after time without executing rest of for loop lines (they executed once- on first page)

try below code hotel names of pages:

from selenium import webdriver selenium.webdriver.common.by import selenium.webdriver.support import expected_conditions ec 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 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) hotel in my_list] 

in python 2.x replace last line with

for hotel in my_list:     print(hotel) 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -