Python にはかなり慣れていないので、やってみることで学ぶので、このプロジェクトに挑戦してみようと思いました。特定の Web サイトの Google アナリティクス リクエストを検出するスクリプトを作成しようとすると、リクエスト ペイロードが解析され、処理が行われます。
要件は次のとおりです。
- ユーザーに 2 つの URL を要求します (2 つの異なる HAR ペイロードのペイロードを比較するため)。
- Selenium を使用して 2 つの URL を開き、browsermobproxy/phantomJS を使用してすべての HAR を取得します
- HAR をリストとして保存する
- すべての HAR ファイルのリストから、ペイロードを含む Google アナリティクス リクエストを見つけます。
- 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()