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

时间:2015-02-05 09:17:52

标签: python url selenium webdriver

我正在尝试以编程方式确定某些网址的最终目标网页,然后我遇到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不会返回。

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并请求并没有找到方法让我抓住这个,也没有阻止它。 有什么提示吗?

(请注意,此网址实际上会查看访问它的代理,因为重定向。两个FireFox和Chrome都没有“捕获”,因此它会循环到自身。)

1 个答案:

答案 0 :(得分:2)

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']