Ich benutze Selenium auf http://seattle.bestparking.com/, um durch die Parkhaus-Marker (rot, grau, blau) zu klicken, mit der Absicht, das Pop-up-Info-Fenster zu öffnen, damit ich dann verschrotten kann die Info (auf der Seite "Rate" im Popup-Fenster). Siehe meinen Code am Ende.Interaktion mit Seitenelementen, die HTML-Werte ändern
Es scheint jedoch, dass jeder innere HTML-Code des Garagen-Markers (!!) nach dem Klicken auf einen anderen Garagenmarker der gleichen Farbe und Schließen (aufgrund des Inhalts-Nachladens) geändert wird.
Zum Beispiel: wenn ich meinen Code ausführe, erscheint die "Motif Seattle" Garage als div id = daily_colored_marker_577
. Aber nachdem irgendein anderer Marker der gleichen Farbe angeklickt wurde, erscheint "Motif Seattle" als div id = daily_colored_marker_1042
... und ändert sich ständig.
Dies macht es scheinbar unmöglich durch alle Markierungen zu durchlaufen, die ich (Ergebnis find_elements_by_class
) ausgewählt haben, da sie den folgenden Typ oder Fehler werfen, wenn sie in der ausgewählten Liste der 2. Element erreicht:
WebDriverException: unknown error: Element <div
class="daily_colored_marker_n_a" id="daily_colored_marker_344" onmouseover="show_hide_balloonWindowMonthly('', 'IMPARK', 'IMPARK M Street
Garage', '344', 400, 'n_a', offsetPosition('daily_colored_marker_344')...
</div> is not clickable at point (708, 543). Other element would receive the
click: <div class="daily_colored_marker_grey"...
Mein Code:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Chrome()
driver.get('http://seattle.bestparking.com/')
driver.maximize_window()
'''Tells driver to wait until the "I understand" button to be clickable'''
wait = WebDriverWait(driver, 30)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//*
[@id='calendar_navigation_hint']/button")))
'''makes the disclaimer pop-up and the left menu go away, to reveal more of
the map'''
driver.find_element_by_xpath("//*@id='calendar_navigation_hint']
/button").click()
time.sleep(2)
driver.find_element_by_xpath("//*
[@id='map_left_panel_min_max_btn_div_oa']").click()
time.sleep(2)
'''zooms out one level'''
driver.find_element_by_xpath("//*
[@id='google_maps_zoom_control_minus_id']").click()
time.sleep(5)
'''find all the red markers and click on them'''
all_red = driver.find_elements_by_css_selector("div.daily_colored_marker_n_a")
time.sleep(3)
for x in range(0,len(all_red)):
all_red[x].click()
time.sleep(2)
driver.find_element_by_xpath("//*[@id='marker_window_close_text']").click()
time.sleep(3)