我正在尝试以编程方式确定某些网址的最终目标网页,然后我遇到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都没有“捕获”,因此它会循环到自身。)
答案 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']