Selenium+Python:for。。(循环)未按预期工作

Selenium+Python:for。。(循环)未按预期工作,python,python-2.7,selenium,selenium-webdriver,Python,Python 2.7,Selenium,Selenium Webdriver,这是我的密码。我想做的是打印所有酒店的名字 带有搜索词柏林的网页,德国。 当我按下Pycharm中的“运行”按钮时,屏幕上没有打印任何内容。 有人能找出我代码中的错误吗 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium

这是我的密码。我想做的是打印所有酒店的名字 带有搜索词柏林的网页,德国。 当我按下Pycharm中的“运行”按钮时,屏幕上没有打印任何内容。 有人能找出我代码中的错误吗

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()

脚本的逻辑中有两个问题:

您的酒店名称在循环外定义。这意味着您只需在第一页上获取一次元素列表; 定义了下一个变量,但不使用它; for循环内部的while循环打算一次又一次地单击Next按钮,而不执行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 

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]
在Python2.x中,将最后一行替换为

for hotel in my_list:
    print(hotel)

我猜这是因为你住的酒店的名字是空的。。。你能把酒店的名字打印出来吗?@Andersson谢谢你的回答!当我更改为printhotel_name时,它只打印第一个酒店名称的硒值,然后单击第二页上的…,卡在那里!我这样做了,我也有同样的问题。它自动加载1-2页。在第二页,它卡住了,也没有打印任何内容:不应该在“While…”之前在某处申报“hotel”?你是什么意思?你有什么例外吗?代码在Python3.6中运行良好。Python2.7可能会有一些问题,但我需要知道到底是什么不起作用,因为目前我只有3.6版本,无法用2.7检查代码。我做了上述更改,它会打印每个页面的结果,但要打印每个页面的酒店名称,我必须点击浏览器中“刷新”按钮旁边的“X”按钮。否则每次都会停留在同一页上!try:WebDriverWaitdriver,5.untelec.element可点击[By.CSS\u SELECTOR,*[data page next]]。点击我的列表中的酒店:printhotelOk,我发现2.7版本存在问题。我会尽快换成3.6,我会让你知道的!你是摇滚明星。它工作了,虽然我必须在大量的页面上测试它…我会让你知道。你能向我解释一下在“While”和“try”之间发生了什么事吗?另外,你能给我一些关于selenium+python+webscraping的阅读/研究资源吗?非常感谢。