首页 > 解决方案 > 外部服务在浏览器和 Python 3 脚本中返回不同机器的外部 IP

问题描述

我尝试了以下线程中给出的 Python 3 的多个选项来获取机器的外部 IP:

使用 Python 获取机器的外部 IP 地址

import urllib.request
from socket import timeout
import os
import json

external_ip = urllib.request.urlopen('https://ident.me', timeout=10).read().decode('utf-8')
print(external_ip)

externalIP  = os.popen('curl -s ifconfig.me').readline()
print(externalIP)

data = json.loads(urllib.request.urlopen("http://ip.jsontest.com/").read())
print (data["ip"])

当我在浏览器中打开链接 - https://ident.mehttp://ipconfig.mehttp://ip.jsontest.com时,它们提供的 IP(3 个外部服务相同)与显示的不同在屏幕上(我的内部 IP)。什么可能导致此问题?我正在使用一个更改外部 IP 的代理应用程序,并希望将其用于脚本中的代理。

标签: python-3.x

解决方案


在花费大量时间尝试解决方案后,根据@Kevin@mata的意见,我终于得出了答案。感谢 Kevin 和 Mata,非常感谢您的帮助。

以下是该问题的解决方法:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://ident.me")
elem = driver.find_element_by_tag_name('pre')
element_text = elem.text
print (element_text)

driver.close()

现在它通过模拟浏览器然后抓取它而不是直接使用请求来返回与浏览器相同的 IP。


推荐阅读