如何通过 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']
我正在尝试以编程方式确定某些 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']