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

    検索エンジン-自然とは-Adobe Analyticsの指標説明

    こんにちは。インターン生の市川です。今回は検索エンジン-自然につい…

  2. Adobe Analytics

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

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

  3. Adobe Analytics

    訪問者数とは-Adobe Analyticsの指標説明

    今回は訪問者数について説明いたします。訪問者数とは期間中に…

  4. Adobe Analytics

    Adobe Analytics 3つの主要指標

    こんにちは!インターンの藤本です。今日はAdobe Analyti…

  5. Adobe Analytics

    レポートビルダーを使ってデータを出す方法

    こんにちは!インターンの藤本です。今日はレポートビルダーを使っ…

  6. Adobe Analytics

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

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

コメント

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

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

CAPTCHA


  1. ブログ

    マーケティングオートメーションの根幹:リードについて解説してみた!
  2. IT用語集

    オープンシステム(Open System)って何?
  3. IT用語集

    オブジェクト(Object)・オブジェクト指向(Object-Oriented)…
  4. IT用語集

    オーバーロード(Overload)って何?
  5. IT用語集

    コンピュートエンジン (Compute Engine)って何?
PAGE TOP