【问题标题】:How to zoom in on an element when scraping an interactive map?抓取交互式地图时如何放大元素?
【发布时间】:2023-12-20 13:55:02
【问题描述】:

下面的代码旨在用于扫描整个西班牙,从可点击的蓝色点(仅在缩放的黑暗部分可见)中获取信息。因此,如果您运行下面的代码,它将尝试单击蓝点簇,但会失败,因为它们都在彼此之上并且靠得太近。

因此我想知道是否可以放大蓝点簇,使它们彼此分开,单击所有点,再次缩小并继续扫描。

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=chrome_options)

codes = []
driver.get('https://geoportal.minetur.gob.es/VCTEL/vcne.do')

for x in range(2):
    driver.find_element_by_xpath('//* [@id="OpenLayers.Control.PanZoomBar_59_zoomin"]').click()

for x in range(4):
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="OpenLayers.Control.PanZoomBar_59_panup"]').click()

for x in range(3):
     time.sleep(1)
     driver.find_element_by_xpath('//*[@id="OpenLayers.Control.PanZoomBar_59_panright"]').click()

for x in range(2):
    driver.find_element_by_xpath('//*[@id="OpenLayers.Control.PanZoomBar_59_zoomin"]').click()

for x in range(2):
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="OpenLayers.Control.PanZoomBar_59_pandown"]').click()

for x in range(9):
     driver.find_element_by_xpath('//*[@id="OpenLayers.Control.PanZoomBar_59_zoomin"]').click()

for x in range(60000):
    for x in range(273000):
        time.sleep(2)
        towers = driver.find_elements_by_css_selector("div#map image[id*='OpenLayers.Geometry']")
        for tower in towers:
            tower.click()
            codes.append(driver.find_element_by_xpath('//*[@id="divDatosFeatureInfo"]/table/tbody/tr[3]/td/div/p').text)
        for x in range(14):
            time.sleep(1)
            driver.find_element_by_xpath('//*[@id="OpenLayers.Control.PanZoomBar_59_panright"]').click()

【问题讨论】:

    标签: python selenium interactive


    【解决方案1】:

    您可以使用 Javascript 来点击蓝点,通过这种方式,虽然点重叠,但仍会被点击。这是示例。

    #replace "tower.click()" with below line
    driver.execute_script("arguments[0].click();",tower);
    

    我可能需要深入研究才能找到缩放和滚动所有西班牙地图的方法。

    【讨论】:

    • 运行时出现此错误:'javascript error: arguments[0].click is not a function'
    • 点击后有没有错过()