0

Python にはかなり慣れていないので、やってみることで学ぶので、このプロジェクトに挑戦してみようと思いました。特定の Web サイトの Google アナリティクス リクエストを検出するスクリプトを作成しようとすると、リクエスト ペイロードが解析され、処理が行われます。

要件は次のとおりです。

  1. ユーザーに 2 つの URL を要求します (2 つの異なる HAR ペイロードのペイロードを比較するため)。
  2. Selenium を使用して 2 つの URL を開き、browsermobproxy/phantomJS を使用してすべての HAR を取得します
  3. HAR をリストとして保存する
  4. すべての HAR ファイルのリストから、ペイロードを含む Google アナリティクス リクエストを見つけます。
  5. Google アナリティクス タグが見つかった場合は、ペイロードの解析などの処理を行います。ペイロードの比較などを行います。

問題: Google アナリティクスがあることがわかっている Web サイト (nytimes.com など) で、取得した HAR (プログラムなど) が不完全な場合があります。「GA Not found」と表示されますが、これは完全な HAR がキャプチャされていないためであり、一致する HAR を見つけるために正規表現が実行されたときに、そこにはありませんでした。この問題は断続的に発生し、常に発生するわけではありません。何か案は?

なんらかの依存関係または遅延が原因で、スクリプトが進行し、完全な HAR がキャプチャされなかったと考えています。「トラフィックが停止するのを待つ」ことを試みましたが、何かが間違っていたのかもしれません。

また、おまけとして、このスクリプトをかなり遅く実行する方法について、あなたが提供できる助けをいただければ幸いです。私が述べたように、私はPythonが初めてなので、簡単に行きます:)

これは私がこれまでに得たものです。

import browsermobproxy as mob
from selenium import webdriver
import re
import sys
import urlparse
import time
from datetime import datetime


def cleanup():
    s.stop()
    driver.quit()

proxy_path = '/Users/bob/Downloads/browsermob-proxy-2.1.4-bin/browsermob-proxy-2.1.4/bin/browsermob-proxy'
s = mob.Server(proxy_path)
s.start()
proxy = s.create_proxy()
proxy_address = "--proxy=127.0.0.1:%s" % proxy.port
service_args = [proxy_address, '--ignore-ssl-errors=yes', '--ssl-protocol=any']  # so that i can do https connections
driver = webdriver.PhantomJS(executable_path='/Users/bob/Downloads/phantomjs-2.1.1-windows/phantomjs-2.1.1-windows/bin/phantomjs', service_args=service_args)
driver.set_window_size(1400, 1050)

urlLists = []
collectTags = []
gaCollect = 0
varList = []

for x in range(0,2): # I want to ask the user for 2 inputs
    url = raw_input("Enter a website to find GA on: ")
    time.sleep(2.0)
    urlLists.append(url)

    if not url:
        print "You need to type something in...here"
        sys.exit()
    #gets the two user url and stores in list

for urlList in urlLists:

    print urlList, 'start 2nd loop' #printing for debug purpose, no need for this

    if not urlList:
        print 'Your Url list is empty'
        sys.exit()

    proxy.new_har()
    driver.get(urlList)
    #proxy.wait_for_traffic_to_stop(15, 30) #<-- tried this but did not do anything

    for ent in proxy.har['log']['entries']:
        gaCollect = (ent['request']['url'])

        print gaCollect

        if re.search(r'google-analytics.com/r\b', gaCollect):

            print 'Found GA'
            collectTags.append(gaCollect)
            time.sleep(2.0)
            break
    else:

        print 'No GA Found - Ending Prog.'
        cleanup()
        sys.exit()

cleanup()
4

1 に答える 1