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 Summit 2020レポート: Advanced Techniques to Get …

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

  2. Adobe Analytics

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

    今回は入口について説明いたします。入口とはユーザがサイトを訪問した…

  3. Adobe Analytics

    はじめてのAdobe Analytics実装②

    前回勉強した内容をもとに、今回は実際にエクスチュアのs_code.js…

  4. Adobe Analytics

    Adobe Analytics:自動で分析してくれる貢献度分析(異常値検出)機能

    こんにちは、CEOの原田です。今回は随分前から公開されてるのに…

  5. Adobe Analytics

    Adobe Analytics: ランドスケイプの「企業ログ解析データベースAPI」と連携する

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

  6. Adobe Analytics

    Adobe Analytics: データフィードをBigQueryで集計する

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

コメント

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

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

CAPTCHA


最近の記事

  1. 回帰分析はかく語りき Part3 ロジスティック回帰
  2. GCSへのSnowflake Open Catalogによる…
  3. VPC Service Controlsで「NO_MATCH…
  4. モダンデータスタックなワークフローオーケストレーションツール…
  5. Streamlit in Snowflakeによるダッシュボ…
  1. Mouseflow

    mouseflow vs Microsoft Clarity
  2. ObservePoint

    Webサイトのプライバシー検証 (6/6): 知らない国やドメインにデータを送っ…
  3. Python

    わかりやすいPyTorch入門②(ニューラルネットワークによる分類)
  4. Data Clean Room

    忘年会シーズンに「DCRごっこ」のご提案
  5. IT用語集

    SQL・クエリ(Query)って何?
PAGE TOP