80788


### 前提・実現したいこと

python:seleniumを使って  
Excelから繰り返しデータを読み、[Twitter](https://twitter.com/search-
advanced?lang=en)で複数のデータを検索したいです。  
B列に同じ国が2つ以上ある場合、[Twitter](https://twitter.com/search-
advanced?lang=en)で下記のように検索したいです。

### Excel データ

[code]

    1   アメリカ カリフォルニア 
    1   アメリカ　フロリダ
    2   フランス  パリ
    3   日本   　東京
    
[/code]

### 検索したい順番

[code]

    アメリカ "カリフォルニア" (フロリダ) →１回目のループで検索したい内容
    フランス "パリ" →2回目のループで検索したい内容
    日本 "東京" →3回目のループで検索したい内容
    
[/code]

下記のコードだと試してみましたが、  
検索したい順番で上手くループされず、  
B列に同じ国が2つ以上ある場合、ループはどのように指定すればよろしいでしょうか。

Forについてあまり詳しくないですが、Forをこちらの部分に追加すればよろしいでしょうか。

[code]

     #都市が2つ以上がある場合
        c2 = v_ws['c2'].value   
        print(c2)
    
        #都市2つ以上がある場合、c列を入力(現在固定)⇒データが不定期の場合、ループさせたい部分
        city2 = driver.find_element_by_name("anyOfTheseWords")
        city2.send_keys(c2)
    
    
[/code]

**現在の検索の結果**

[code]

    アメリカ "カリフォルニア" (フロリダ) →１回目のループで検索
    アメリカ "カリフォルニア" (フロリダ)→2回目のループで検索
    フランス "パリ" (フロリダ)→3回目のループで検索
    日本 "東京" (フロリダ)→4回目のループで検索
    
[/code]

**Code**

[code]

    # Excel用ライブラリ読込
    import openpyxl
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select  
    from selenium import webdriver
    import pyautogui
    
    # Excelファイルを開く
    v_wb=openpyxl.load_workbook("test.xlsx")
    
    # アクティブなシートを変数へ
    v_ws = v_wb.active
    # シートのロード
    ws = v_wb.worksheets[0]
    
    #1行目からループを行う
    for i in range(1,v_ws.max_row+1):
    
        #国b列
        b = v_ws['b'+str(i)].value
    
        #都市c列
        c = v_ws['c'+str(i)].value
        print(c)
    
        #都市が2つ以上がある場合
        c2 = v_ws['c2'].value   
        print(c2)
    
        URL= "https://twitter.com/search-advanced?lang=en"
    
        # ブラウザを開く。 #options=option background 
        driver = webdriver.Chrome(executable_path="C:\\Program Files\\chromedriver_win32\\chromedriver.exe")
    
        # Googleの検索TOP画面を開く。
        driver.get(URL)
    
        # 2秒待機
        time.sleep(2)
    
        #country
        country = driver.find_element_by_name("allOfTheseWords")
        country.send_keys(b)
        
        # 2秒待機
        time.sleep(2)
    
        #都市のc列を入力
        city = driver.find_element_by_name("thisExactPhrase")
        city.send_keys(c)
    
        #都市2つ以上がある場合、c列を入力(現在固定)⇒データが不定期の場合、ループさせたい部分
        city2 = driver.find_element_by_name("anyOfTheseWords")
        city2.send_keys(c2)
    
        #検索
        time.sleep(2)
        pyautogui.press(['enter'])
    
    #ここまでを繰り返し --------------------------------------------------------------------
    
[/code]

### 補足情報（Python/ツールのバージョンなど）

Python3/Windows10を利用しています。

もしわかる方いれば、教えていただけるとありがたいです。  
よろしくお願いいたします。


CC BY-SA 4.0
2021-08-14T00:55:38.230
80783
2021-08-14T05:54:35.767
2021-08-14T01:02:34.143
18859
18859
question
python python3 twitter selenium
ExcelからTwitter（selenium）で特定の条件がある場合、繰り返し処理を行う方法について


以下では前回の回答と同様に Excel のシートを Pandas のデータフレームに変換しています。  
生成される検索ワードの組み合わせは以下の様になります。

[code]

    [['アメリカ', 'カリフォルニア', 'フロリダ'], ['フランス', 'パリ'], ['日本', '東京']]
    
[/code]

都市名が2個ある場合には要素数が3個になるので、その場合は `anyOfTheseWords` 欄に2個目の都市名を入力する様にしています。

なお、デバッグ目的で Google Chrome を detach しているのと、検索する度に新規にタブを開いています。適宜変更してください。

[code]

    # Excel用ライブラリ読込
    import openpyxl
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select  
    from selenium import webdriver
    import pyautogui
    import pandas as pd
    
    # Excelファイルを開く
    v_wb = openpyxl.load_workbook("test.xlsx")
    
    # アクティブなシートを変数へ
    v_ws = v_wb.active
    # シートのロード
    ws = v_wb.worksheets[0]
    
    # convert to pandas dataframe
    df = pd.DataFrame(ws.values)
    
    # generate search words
    lst = (
      df.groupby(1, as_index=False)[2]
        .agg(lambda x: x.tolist())
        .apply(lambda x: [x[1]] + x[2], axis=1)
        .tolist()
    )
    print(lst)
    
    URL = "https://twitter.com/search-advanced?lang=en"
    
    # ブラウザを開く。 #options=option background 
    options = Options()
    options.add_experimental_option('detach', True)
    driver = webdriver.Chrome(executable_path="C:\\Program Files\\chromedriver_win32\\chromedriver.exe", options=options)
    
    for i, query in enumerate(lst):
        # Googleの検索TOP画面を開く。
        if i > 0:
          driver.execute_script('window.open()')
        driver.switch_to.window(driver.window_handles[i])
        driver.get(URL)
    
        # 2秒待機
        time.sleep(2)
    
        # country
        country = driver.find_element_by_name("allOfTheseWords")
        country.send_keys(query[0])
    
        # 2秒待機
        time.sleep(2)
    
        # 都市のc列を入力
        city = driver.find_element_by_name("thisExactPhrase")
        city.send_keys(query[1])
    
        # 都市2つ以上がある場合、c列を入力(現在固定)⇒データが不定期の場合、ループさせたい部分
        if len(query) > 2:
          city2 = driver.find_element_by_name("anyOfTheseWords")
          city2.send_keys(query[2])
    
        # 検索
        time.sleep(2)
        pyautogui.press(['enter'])
    
[/code]


CC BY-SA 4.0
2021-08-14T05:54:35.767
80788
2021-08-14T05:54:35.767
47127
80783
answer