Es ist nicht so einfach, wie man das Problem wegen der dynamischen Natur der Seite angehen kann - Sie müssen hier und dort verwenden und es ist schwierig, den HTML der dynamischen Komponenten zu erfassen, die auf Klicken oder Schweben erscheinen.
Hier ist der vollständige Arbeitscode, der zur Seite navigieren, auf die "Einchecken" -Eingabe klicken, auf das Laden des Kalenders warten und die Verfügbarkeit für jeden Tag im Kalender melden würde (es verwendet das Vorhandensein von ui-datepicker-unselectable
Klasse, um das zu bestimmen). Dann schwebt sie jede Zelle mit der move_to_element()
Browser Aktion, wartet auf den Tooltip und erhält den Preis:
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://www.airbnb.pt/rooms/265820?check_in=2016-04-26&guests=1&check_out=2016-04-29")
# wait for the check in input to load
wait = WebDriverWait(driver, 10)
elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.book-it-panel input[name=checkin]")))
elem.click()
# wait for datepicker to load
wait.until(
EC.visibility_of_element_located((By.CSS_SELECTOR, '.ui-datepicker:not(.loading)'))
)
days = driver.find_elements_by_css_selector(".ui-datepicker table.ui-datepicker-calendar tr td")
for cell in days:
day = cell.text.strip()
if not day:
continue
if "ui-datepicker-unselectable" in cell.get_attribute("class"):
status = "Unavailable"
else:
status = "Available"
price = "n/a"
if status == "Available":
# hover the cell and wait for the tooltip
ActionChains(driver).move_to_element(cell).perform()
price = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.datepicker-tooltip'))).text
print(day, status, price)
Drucke:
1 Unavailable n/a
2 Unavailable n/a
3 Unavailable n/a
4 Unavailable n/a
5 Unavailable n/a
6 Unavailable n/a
7 Unavailable n/a
8 Unavailable n/a
9 Unavailable n/a
10 Unavailable n/a
11 Unavailable n/a
12 Unavailable n/a
13 Available €40
14 Unavailable n/a
15 Unavailable n/a
16 Unavailable n/a
17 Unavailable n/a
18 Unavailable n/a
19 Available €36
20 Available €49
21 Unavailable n/a
22 Available €49
23 Unavailable n/a
24 Unavailable n/a
25 Available €40
26 Available €39
27 Available €35
28 Available €37
29 Available €37
30 Available €37
fast scheint es, dies zu sein, aber wie über den Tooltip mit dem Preis, wenn ich ihm schweben auf? Wie kann ich den Preis bekommen, wenn es verfügbar ist? – psychok7
@ psychok7 okay, sicher, aktualisiert. Hoffe es hilft :) – alecxe
ok ich werde dies jetzt testen und lassen Sie wissen, ob es funktioniert .. danke – psychok7