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. Adobe Analytics

    Adobe Analytics-分析ワークスペースの使い方

    こんにちは!インターン生の藤本です。今回はフリーフォームを使用した…

  2. Adobe Analytics

    購入とは-Adobe Analyticsの指標説明

    今回は購入について説明します。「購入」の下には「購入回数」「購…

  3. Adobe Analytics

    出口とは-Adobe Analyticsの指標説明

    今回は出口について説明いたします。出口とはサイトを訪れたユ…

  4. Adobe Analytics

    バウンスとは-Adobe Analyticsの指標説明

    今回はバウンスについて説明いたします。バウンスとはサイトを…

  5. Adobe Analytics

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

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

  6. Adobe Analytics

    再来訪頻度とは-Adobe Analyticsの指標説明

    今回は再来訪頻度について説明いたします。再来訪頻度とはサイ…

コメント

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

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

CAPTCHA


  1. ブログ

    ダッシュボードでよくある間違い①
  2. Adobe Analytics

    検索エンジン-有料とは-Adobe Analyticsの指標説明
  3. ブログ

    ダッシュボードに使うべき10のグラフ②
  4. Adobe Analytics

    サイトセクションとは-Adobe Analyticsの指標説明
  5. Adobe Analytics

    Adobe Analytics 3つの主要指標
PAGE TOP