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_name
defined out of loop. means gets list of elements once- on first page only; - your
visible_next
variable defined, don't use it; - the
while
loop insidefor
loop intents click "next" button time after time without executing rest offor
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
Post a Comment