如何通过 requests.get 或 selenium 处理捕获和处理重定向循环?

How to handle catch and handle redirect loops through requests.get or selenium?

我正在尝试以编程方式确定某些 url 的最终登陆页面,然后我 运行 进入 http://event.four33.co.kr/20131030/redirect.html,这基本上是循环回到自身:

<script type="text/javascript">
    var agent = navigator.userAgent;
    var redirectUrl = "";

    if (agent.indexOf("Windows NT") != -1)
    {
        redirectUrl = "https://play.google.com/store/apps/details?id=com.ftt.suhoji_gl_4kakao";
    }
    else if (agent.indexOf("iPhone") != -1)
    {
        redirectUrl = "https://itunes.apple.com/kr/app/id705181473?mt=8";
    }
    else if (agent.indexOf("iPad") != -1)
    {
        redirectUrl = "https://itunes.apple.com/kr/app//id705181473?mt=8";
    }
    else if (agent.indexOf("Android") != -1)
    {
        redirectUrl = "market://details?id=com.ftt.suhoji_gl_4kakao";
    }
    location.href = redirectUrl;
</script>

当我的脚本(见下面的代码片段)命中时,driver.current_url 永远不会 return。

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()
driver=webdriver.Firefox()
driver.get('http://event.four33.co.kr/20131030/redirect.html')
driver.current_url

我尝试了 urllib2 和请求,但没有找到一种方法来捕获它,也没有阻止它。 有什么建议吗?

(请注意,此 url 实际上会查看访问它的代理,因为重定向。FireFox 和 Chrome 都不是 "captured",因此它会循环到自身。)

requests 可以处理:

try:
    requests.get(looper)
except requests.exceptions.TooManyRedirects:
    do stuff

如果您想检测循环而不仅仅是中断,您可以使用类似于 this one:

的代码
history = []
while url not in history and len(history) < 42:
    history.append(url)
    r = requests.get(url, allow_redirects=False)
    if 'location' in r.headers:
        url = r.headers['location']