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. ChatGPT

    LangChainって何?: 次世代AIアプリケーション構築 その1

    こんにちは、エクスチュアの石原です。近年、大規模言語モデル(…

  2. Adobe Analytics

    オリジナルの参照ドメインとは-Adobe Analyticsの指標説明

    こんにちは。インターン生の市川です。今回はオリジナルの参照ドメインに…

  3. Adobe Analytics

    Adobe Analyticsを知る。

    Adobe Analyticsを知る。 -エクスチュアのツール紹介-ア…

  4. Adobe Analytics

    AA(Adobe Analytics)を導入しよう!

    はじめにこんにちは!インターンの與那覇(ヨナハ)です今回はAA(A…

  5. Adobe Analytics

    Adobe AnalyticsのDatafeedをBigQueryのColumn-based Tim…

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

  6. Adobe Analytics

    リファラーとは-Adobe Analyticsの指標説明

    今回はリファラーについて説明したいと思います。リファラーとはユーザ…

コメント

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

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

CAPTCHA


最近の記事

  1. 【GA4/GTM】dataLayerを使ってカスタムイベント…
  2. KARTE を使ってサイト外でも接客を
  3. 【GA4/GTM】dataLayerを活用しよう
  4. ジャーニーマップをデジタルマーケティングの視点で
  5. ChatGPT ProからClaude3 Proへ移行した話…
  1. Tableau

    【図解】Tableau Desktop 2020.2の新機能をはじめから丁寧に(…
  2. IT用語集

    インプリ(Imple)って何?
  3. IT用語集

    ファーストパーティー、セカンドパーティー、サードパーティデータって何?
  4. ブログ

    "Marketo"を使ってみて。パート2
  5. Amazon Web Services

    パブリックサブネット vs プライベートサブネット
PAGE TOP