2017-04-07 143 views
0

这是我的代码。我正在尝试的是在所有 页面中输入搜索词“BERLIN,GERMANY”打印所有酒店名称。 虽然我在Pycharm中按'运行'按钮,但屏幕上没有任何内容。 任何人都可以弄清楚我的代码中有什么错误吗?Selenium + Python:for ..(loop)不能按预期工作

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'是空的......你可以尝试'打印(hotel_name)'? – Andersson

+0

@安德森感谢您的回答!当我要更改打印(hotel_name)时,它仅打印第一个酒店名称的硒值,然后单击第二页上的...并卡在那里! –

回答

0

有你的脚本的逻辑几个问题:

  1. hotel_name定义退出循环。这意味着您只能在第一页上获取元素列表,
  2. 您的visible_next变量已定义,但您不使用它;
  3. while循环内for循环意图单击“下一步”按钮,一次又一次不执行的for环线其余(他们将在第一页上只once-执行)

尝试下面的代码从所有网页得到酒店名称:

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] 

Python 2.x替换最后一行与

for hotel in my_list: 
    print(hotel) 
+0

在最后一行它给我一个语法错误。 –

+0

我这样做,我有同样的问题。它自动加载1-2页。在第二页卡住了,也没有打印任何东西。 :( 不应该在'While ..'之前的地方声明'hotel'? –

+0

你是什么意思*卡住*?你有什么异常吗?代码可以很好地适用于Python 3.6。可能有一些问题' Python 2.7',但我需要知道什么不工作,因为现在我只有'3.6'版本,并且不能用'2.7'检查代码 – Andersson