Adobe Analytics

Google Analytics検証を効率的に進める方法

0.初めに

Google Analyticsがデータをとれているか検証する必要がある、というときにページを一つ一つ手動で辿って条件を付加して…というのは大変な手間であると思います。もちろん定期的に数値をとりたいだけであればメール等で定期的に配信されるようにすればよいのですが、一回きりの検証でもページ数が1000を超える場合には人力で行うのは気が遠くなるような作業になります。
そのようなときにpython+seleniumでページを選ぶ切り替えさせてスクリーンショットや数値をとってくることが可能です。

1.python+selenium環境

windows10 (Microsoft Windows [Version 10.0.17134.471])
Anaconda 4.6.7
selenium 3.141.0
chromedriver 74 (http://chromedriver.chromium.org/downloads よりダウンロード)
環境設定の方法は適宜別サイトを参考にしてください。

2.userの設定

GAにログインするためにはIDとpasswordを入力する必要があります。他サイトであればページに直接送るようにスクリプトを書いてもよいのですが、GAでは二段階認証が設定されていることも多いのでChromeユーザープロファイルに設定をするようにします。この際に既存のプロファイルを使う方法と新規のものを作成する方法の二通り考えられますが、できる限り認証は使い捨てにしてタスクが終了したら消すようにしておきたいので今回は新規で作成します。作業ディレクトリに”UserData”等の名前でディレクトリを作っておきます。

import selenium
options = webdriver.ChromeOptions()
#プロファイルの設定
options.add_argument('--user-data-dir=' + userdata_dir)
driver = webdriver.Chrome(options=options)
#ページ遷移
driver.get("https://analytics.google.com/web/")

まで実行し、一度ID・passを入力して二段階認証をしましょう。終わったら

driver.quit()

でドライバーを閉じましょう。

3.その他importしておくライブラリ

time等で指定秒待機するのは使い勝手が悪いですし、無駄に時間がかかったり動作が不安定になったりするので具体的な条件で指定できるようにします。
また、条件などを指定するときにEnterを押したほうが楽な場合もあるのでKeysもimportしておきます。

import time
import selenium
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait #条件によってドライバーを待機させるため
from selenium.webdriver.support import expected_conditions as EC #待機条件を指定するため
from selenium.webdriver.common.keys import Keys #key入力をするため

4.実際の動作

さて、実際の操作においては当然検証ごとに動きが異なるので必要に応じてスクリプトを組む必要があります。
今回は「サイトコンテンツ>行動>全てのページ」において「プロパティ・ビューを切り替えてセカンドディメンションにブラウザを指定し、ブラウザーの種類ごとにPV数を取得・グラフのスクリーンショットを撮る」という仮想課題を考えてスクリプトを組みます。

4-1.ドライバーの立ち上げ~スタートページ立ち上げ

strat_page="https://analytics.google.com/analytics/web/#/report/content-pages/********/_u.date00=20190101&_u.date01=20190131"
driver = webdriver.Chrome(options=options,executable_path=r'C:/Users/exture1/Desktop/chromedriver.exe')
driver.maximize_window()
driver.get(start_page) #
driver.execute_script("document.body.style.zoom='90%'")  #ズームを90%にしてページ全体を表示するようにする。

レポートのコンテンツを変えたり、日付の期間を変えるのはするのはやや面倒なのでスタートページに含ませてやります。(入ってしまえばビューの遷移をしても切り替わりしない)

4-2.iframeの取り扱い

GAのページはiframe タグによってhtmlの中にhtmlが埋まっている入れ子の構造になっています。このページに対してはフレームを切り替えてあげないとDOMを指定することができません。

iframe=driver.find_element_by_xpath("/html/body/iframe[2]")  #要素を取得
driver.switch_to.frame(iframe) #フレームの切り替え
driver.switch_to.default_content() #フレームを最上位にする

4-3.待機

先ほども申しあげた通り、秒数指定で待機をさせると余計に時間がかかったり待機が十分でなかった場合にエラーが起きたりするのでできる限り条件で指定してあげます。

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ID-explorer-table-tableControl > div > div.C_TABLECONTROL_TOP._GAHd > ul > li:nth-child(4) > div")))
driver.find_element_by_css_selector("#ID-explorer-table-tableControl > div > div.C_TABLECONTROL_TOP._GAHd > ul > li:nth-child(4) > div").click()

のように特定の要素がクリック可能かどうか等で判定してあげます。ロードの際にする処理はほぼ同じなのでメソッドにしてしまいます。

#iframe内での待機
def GA_loading_wait_iframe():
    while (driver.find_element_by_css_selector("#ID-reportLoading").get_attribute("style")!='display: none;'):
        time.sleep(1)
#最上位フレームでの待機
def GA_loading_wait_default():
    driver.switch_to.default_content()
    WebDriverWait(driver, 10).until_not(EC.text_to_be_present_in_element((By.CSS_SELECTOR,loading_css_selector),"aria-hidden"))

BYの使い方はこちら

4-4.実践

それでは実際にやってみましょう。なお、一部セレクターがうまいこと使えなかったのでxpathで指定していて、可読性が低いので適当に変数を導入しています。

#ブラウザを切り替えるためのメソッド
def browser_change(browser):
    filename=browser+".png"
    WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,advance_xpath)))
    driver.find_element_by_css_selector("#ID-explorer-table-tableControl > div > div.C_TABLECONTROL_TOP._GAHd > ul > li._GAbo._GAeg._GAdGb > span > ul > li.ACTION-apply.TARGETーfilter._GAy._GApg > span").click()
    time.sleep(1)
    driver.find_element_by_xpath(browser_name_input_xpath).clear()
    driver.find_element_by_xpath(browser_name_input_xpath).send_keys(browser)
    driver.execute_script(down_scroll_script)
    driver.find_element_by_xpath(filter_apply_xpath).click()
    GA_loading_wait_iframe()
    driver.save_screenshot(filename)
driver = webdriver.Chrome(options=options,executable_path=r'C:/Users/exture1/Desktop/chromedriver.exe')
driver.maximize_window()
driver.get(start_page)
driver.execute_script("document.body.style.zoom='90%'")
#driverをiframeに入れる
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "/html/body/iframe[2]")))
iframe=driver.find_element_by_xpath("/html/body/iframe[2]")
driver.switch_to.frame(iframe)
#セカンダリディメンションの追加
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#ID-explorer-table-tableControl > div > div.C_TABLECONTROL_TOP._GAHd > ul > li:nth-child(4) > div")))
driver.find_element_by_css_selector("#ID-explorer-table-tableControl > div > div.C_TABLECONTROL_TOP._GAHd > ul > li:nth-child(4) > div").click()
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,second_dimension_input)))
driver.find_element_by_xpath(second_dimension_input).send_keys("ブラウザ")
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,"second_dimension_apply")))
driver.find_elementt_by_xpath(second_dimension_apply).click()
#スクショを撮る
GA_loading_wait_iframe()
driver.save_screenshot("PV.png")
#PV取得
print(driverPV_xpathement_by_xpath("PV_xpath").text)

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Adobe Analytics

    BigQuery: テーブルに格納されたURL文字列をKey-ValueのSTRUCT型で抽出する

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  2. Adobe Analytics

    Adobe Analytics: Datafeedにデバイスデータがないけど慌てない

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  3. Adobe Analytics

    Adobe Analyticsのモバイルアプリが意外と便利

    こんにちは。CEOの原田です。Adobe Analyticsを…

  4. Adobe Analytics

    Adobe AEP SDKでReactNativeアプリを計測する (iOS編)

    こんにちは、エクスチュアの權泳東(コン・ヨンドン)です。今回は…

  5. Adobe Analytics

    Adobe Analyticsに入り切らないデータをBigQueryに投入する

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

  1. Mouseflowのセッションリプレイのしくみ
  2. LangChainって何?: 次世代AIアプリケーション構築…
  3. 1st Party Cookieと3rd Party Coo…
  4. Amplitudeで何が分かる?
  5. SnowflakeのHybrid Tableのマニュアルを読…
  1. Google Analytics

    Google Analytics4 を知る。
  2. Tableau

    Tableauで小笠原諸島等を東京都から除外する方法
  3. Google Cloud Platform

    LookerStudioを知る。
  4. Adobe Analytics

    Adobe Analyticsを知る。
  5. ヒートマップ

    スクロール・ヒートマップ
PAGE TOP