74887


やりたいこと  
Excelからデータを読み込み,yahooで交通費検索したいです。  
各項フィルドごとで作業を繰り返したいです。

以下のサイトと同様な処理をPandasで実現したい。

参考:  
[PythonでExcelからデータ読込→サイトで交通費検索→Excelへデータ書込](https://www.ex-it-blog.com/Python-
Excel-fare)  
[Pythonでエクセルから情報を取得して検索エンジンに入力！](https://takeichi.work/scraping-readexcel/)

Excelのデータ

[code]

       日付        出発    到着    片道・往復  金額
    0 2021-01-01   東京    浅草    NaN NaN
    1 2021-01-02   池袋    品川    NaN NaN
    2 2021-01-03  秋葉原  高田馬場  NaN NaN
    
[/code]

実現したい結果 1行でループさせます。

[code]

    出発：東京、到着：浅草
    出発：池袋、到着：品川
    出発：秋葉原、到着：高田馬場
    
[/code]

現在の結果 1行で全て検索内容に入力されます。

[code]

    出発：東京池袋秋葉原、到着：浅草品川高田馬場
    
[/code]

ループの処理はどのようにすればよろしいでしょうか。

わかる方いらっしゃいましたらご教示願います。  
お手数ですが、宜しくお願いいたします。

code

[code]

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select
    
    import pandas as pd
    
    import time
    
    df = pd.read_excel("交通費.xls")
    df_from = df["出発"]
    df_to =  df["到着"]
    df_cnt = len(df)
    
    print(df.head())
    
    for i in range(df_cnt):
        driver = webdriver.Chrome(executable_path="C:\Program Files\chromedriver_win32\chromedriver.exe")
        driver.get('https://transit.yahoo.co.jp/')
    
        SearchfromTxt = driver.find_element_by_name('from')
        #SearchTxt.clear()
    
        SearchtoTxt = driver.find_element_by_name('to')
    
        SearchfromTxt.send_keys(df_from)
        SearchtoTxt.send_keys(df_to)
    
        SearchtoTxt.submit()
        SearchfromTxt.submit()
        time.sleep(3)
    
    driver.close()
    
[/code]


CC BY-SA 4.0
2021-03-11T12:43:24.387
74593
2021-03-25T07:53:21.417
2021-03-25T04:50:42.910
18859
18859
question
python pandas excel selenium selenium-webdriver
PythonでExcelからデータ読込後、ブラウザで検索


コメントに書きましたが、`df_from`,`df_to`では全体が送られるので、ループカウンタを行位置として`df_from[i]`,`df_to[i]`のように指定します。  
他の指摘も含めて以下のようにすれば出来るでしょう。  
`####`でコメントした所を見ておいてください。

[code]

    from selenium import webdriver
    import pandas as pd
    import time
    
    df = pd.read_excel("交通費.xls")
    df.fillna('',inplace=True) #### NaN を消す
    
    df_from = df["出発"]
    df_to =  df["到着"]
    df_cnt = len(df)
    print(df.head())
    
    #### ドライバオブジェクトは1回作成すれば良いので for ループの前に移動
    driver = webdriver.Chrome(executable_path="C:\Program Files\chromedriver_win32\chromedriver.exe")
    
    for i in range(df_cnt):
        driver.get('https://transit.yahoo.co.jp/')
        time.sleep(1) #### 必要(気分？)に応じてディレイ
        
        SearchfromTxt = driver.find_element_by_name('from')
        SearchtoTxt = driver.find_element_by_name('to')
        
        SearchfromTxt.send_keys(df_from[i]) #### 行毎のループなので行位置を指定　以下同じ
        SearchtoTxt.send_keys(df_to[i])     ####
        
        SearchtoTxt.submit() #### submit()は１つだけ
        time.sleep(3)
        
        #### 結果を取得して pandas DataFrame の該当位置を更新：参照記事より抽出
        df.iloc[i,4] = driver.find_element_by_class_name('fare').text.replace('円','').replace(',','')
    
    print(df) #### 結果表示
    
    driver.close()
    df.to_excel("交通費result.xls",index=False) #### 更新した DataFrame を書き出す
    
[/code]


CC BY-SA 4.0
2021-03-25T07:53:21.417
74887
2021-03-25T07:53:21.417
26370
74593
answer