蟒蛇相当新,我从实践中学习,所以我想我会给这个项目一个机会。尝试创建一个脚本,找到某个网站的Google Analytics分析请求,解析请求有效负载并对其执行某些操作。
以下是要求:
问题:有时对于我知道有谷歌分析的网站,即nytimes.com - 我得到的HAR是不完整的,即我的编程。会说“未找到GA”,但这只是因为没有捕获到完整的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()
答案 0 :(得分:0)
这可能是一个陈旧的问题,但我找到了一个对我有用的答案。
你需要改变两件事: 1 - 删除sys.exit() - 这会导致程序在第一次迭代通过ent列表后停止,所以如果你想要的不是第一件事,那么就找不到它
2 - 调用new_har并启用captureContent选项以获取请求的有效负载: proxy.new_har(options = {'captureHeaders':True,'captureContent':True})
看看是否有帮助。