python-3.x - 外部服务在浏览器和 Python 3 脚本中返回不同机器的外部 IP
问题描述
我尝试了以下线程中给出的 Python 3 的多个选项来获取机器的外部 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.me、http://ipconfig.me和http://ip.jsontest.com时,它们提供的 IP(3 个外部服务相同)与显示的不同在屏幕上(我的内部 IP)。什么可能导致此问题?我正在使用一个更改外部 IP 的代理应用程序,并希望将其用于脚本中的代理。
解决方案
在花费大量时间尝试解决方案后,根据@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。
推荐阅读
- javascript - Firebase JavaScript 获取 UID 并使用它将信息写入实时数据库
- reactjs - React hooks - 传递道具时,它变得未定义
- python - 等待线程被外部函数阻塞
- react-native - 为什么 FlatList renderItem 道具不起作用
- x86 - 读取寄存器还是从内存中读取更昂贵?
- android - 如何检查Firebase中是否已存在值并在android中获取密钥
- excel - Excel 将公式应用于同一单元格
- bash - 将 stdout 设置为默认输出文件并在 bash 中将默认值设置为 3
- sql - 如何在 Oracle SQL 11g 中使用行值动态选择列名?
- python - 在 android studio 4.0 未知方面类型:python