Python - 使用selenium进行javascript网页抓取工作不正常

时间:2015-06-18 13:28:10

标签: javascript python selenium selenium-webdriver web-scraping

我试图从一个航班搜索网页中搜集一些数据。它可能是用Javascript生成的。我尝试了很多方法但没有任何作用,所以我决定尝试 selenium

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://www.pelikan.sk/sk/flights/list?dfc=CVIE%20BUD%20BTS&dtc=CMAD&rfc=CMAD&rtc=CVIE%20BUD%20BTS&dd=2015-07-09&rd=2015-07-14&px=1000&ns=0&prc=&rng=1&rbd=0&ct=0')
print driver.page_source

我虽然返回了最终的javascript生成的html代码,但在浏览器中打开它时,我无法找到此页面上的字符串。

哪里可能是问题?我该怎么办才能获得这些航班?

编辑:我忘了提到该页面正在继续加载新航班。因此,当您在浏览器中打开它时会显示一些航班,但它仍会加载其他航班。

1 个答案:

答案 0 :(得分:1)

该页面具有相当动态特性,您需要wait for the page to load。选择一些表示已加载页面和搜索结果的内容。例如,等到加载图像(带有鹈鹕)变为invisible

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Firefox()
driver.get("https://www.pelikan.sk/sk/flights/list?dfc=CVIE%20BUD%20BTS&dtc=CMAD&rfc=CMAD&rtc=CVIE%20BUD%20BTS&dd=2015-07-09&rd=2015-07-14&px=1000&ns=0&prc=&rng=1&rbd=0&ct=0")

wait = WebDriverWait(driver, 60)
wait.until(EC.invisibility_of_element_located((By.XPATH, '//img[contains(@src, "loading")]')))
wait.until(EC.invisibility_of_element_located((By.XPATH, u'//div[. = "Poprosíme o trpezlivosť, hľadáme pre Vás ešte viac letov"]/preceding-sibling::img')))

print(driver.page_source)

在这里,我们正在等待两只鹈鹕飞走消失:一个更大的一个和一个更小的鹈鹕。