end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

python + selenium + firefox を使用して、google mapで道路距離を算出 - RPAもどき

以下の様になると思います

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import getopt
import os
import sys
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import traceback
import time


def main():
    # browser起動
    browser = init_browser()

    # google mapで道路距離を計測
    get_road_distance_by_gmap(browser)
    
    # 終了処理
    browser.quit()

    
def get_road_distance_by_gmap(browser):

    # google mapを表示
    browser.get("https://www.google.co.jp/maps/dir////")

    # 経路探索 (車)モードへ
    drive_mode_icon = browser.find_element_by_class_name("directions-drive-icon")
    drive_mode_icon.click()

    # スタート地点
    from_address_div = browser.find_element_by_id("directions-searchbox-0")
    from_address_input = from_address_div.find_element_by_tag_name("input")
    from_address_input.send_keys("東京都渋谷区神南二丁目2番1号")
    time.sleep(1)

    # ゴール地点
    to_address_div = browser.find_element_by_id("directions-searchbox-1")
    to_address_input = to_address_div.find_element_by_tag_name("input")
    to_address_input.send_keys("さいたま市大宮区錦町")
    time.sleep(1)

    # 一旦検索することで、オプション欄表示
    search_btn = to_address_div.find_element_by_class_name("searchbox-searchbutton")
    search_btn.click()

    # 検索オプション設定 (高速道路を使用しない 等)
    directions_options_btn = browser.find_element_by_class_name("section-directions-options-link")
    directions_options_btn.click()

    
    avoid_chkboxes = browser.find_elements_by_class_name("kd-checkbox-label")
    avoid_chkboxes[0].click()

    distance_units = browser.find_elements_by_class_name("kd-radio-label")
    distance_units[2].click()

    distance_divs = browser.find_elements_by_class_name("section-directions-trip-distance")
    print( "ROAD DISTANCE:", distance_divs[0].text )


def init_browser():
    profile = webdriver.FirefoxProfile()

    # 様々なoptionを指定していましたが、以前のようなfile downloadを行わない為
    # implicitly_wait(10) 以外、コメントアウトしました

    # 0:desktop, 1:sys規定のfolder, 2:user def folder
    # profile.set_preference("browser.download.folderList",2)
    # profile.set_preference("browser.download.dir", os.getcwd())
    # profile.set_preference("browser.download.manager.showWhenStarting",False)

    # chrome driverでは、download.directory_upgrade=Trueで上書き保存できましたが
    # firefox では、上書き方法不明なので、コメントアウト
    # profile.set_preference("browser.download.directory_upgrade",True)

    # image/png の場合、強制的にdownload (=画面表示しない)
    # profile.set_preference("browser.helperApps.neverAsk.saveToDisk","image/png")

    browser = webdriver.Firefox(firefox_profile=profile)
    #要素がロードされるまでの待ち時間を10秒に設定
    browser.implicitly_wait(10) # seconds
    return browser


if __name__ == '__main__':
    main()