我在http://seattle.bestparking.com/上使用Selenium来点击停车场标记(红色,灰色,蓝色),打算打开弹出信息窗口,这样我就可以废弃信息了弹出窗口中的“费率”页面)。最后看到我的代码。
但是,在您点击任何其他相同颜色的车库标记后,每个车库标记的内部HTML都会发生变化(!!),然后关闭它(由于内容重新加载)。
例如:在运行我的代码时,“Motif Seattle”车库显示为div id = daily_colored_marker_577
。但是,在点击任何其他相同颜色的标记后,“Motif Seattle”显示为div id = daily_colored_marker_1042
...并继续更改。
这使得我似乎无法遍历我选择的所有标记(find_elements_by_class
的结果),因为它会在到达所选列表中的第二个元素时抛出以下类型或错误:
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"...
我的代码:
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)
答案 0 :(得分:0)
我不认为错误意味着你认为它意味着什么。如果你看一下,就会说明另一个元素会收到点击。 Selenium点击元素的中心。如果你看一下地图,就会有一些相互覆盖的针脚。它可能正在尝试单击下一个元素,并且它被一个不同的元素部分覆盖,因此它会抛出错误。
由于我假设您没有尝试执行某些用户场景,因此您可以使用JavascriptExecutor执行单击并单击精确元素。
您可以在this question中看到如何执行此操作的示例。