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() 
there couple of issues in logic of script:
- your hotel_namedefined out of loop. means gets list of elements once- on first page only;
- your visible_nextvariable defined, don't use it;
- the whileloop insideforloop intents click "next" button time after time without executing rest offorloop 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
Post a Comment