首页 > 编程问答 >绕过 API 密钥要求

绕过 API 密钥要求

时间:2024-07-25 16:49:00浏览次数:8  
标签:python selenium-webdriver web-scraping firefox

我正在尝试通过 Selenium-Python-Firefox 与所得税门户(此网站 https://eportal.venuetax.gov.in/iec/foservices/#/login )进行通信,并对此感到震惊打开时

需要API密钥

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.service import Service as FirefoxService
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from webdriver_manager.firefox import GeckoDriverManager
import sys

# this whole part ensure that the page is not influenced by some cache or cookies
# Create a new Firefox profile
firefox_profile = FirefoxProfile()

# Set preferences to clear cache on exit
firefox_profile.set_preference("browser.cache.disk.enable", False)
firefox_profile.set_preference("browser.cache.memory.enable", False)
firefox_profile.set_preference("browser.cache.offline.enable", False)
firefox_profile.set_preference("network.http.use-cache", False)

# Set up Firefox options for headless mode
Rules = FirefoxOptions()
# Rules.headless = True  # Set Firefox to run in headless mode # this doesn't work

# Rules.add_argument("--headless")
# Set up Firefox driver with headless options # this works

Rules.profile = firefox_profile

driver = webdriver.Firefox(service=FirefoxService(executable_path=r'C:\**********************\geckodriver.exe'), options=Rules)
# Navigate to the URL
url = "https://eportal.incometax.gov.in/iec/foservices/#/login"
driver.get(url)
# url2 = "https://eportal.incometax.gov.in/iec/foservices/#/login"
# driver.get(url2)
# driver.delete_all_cookies()
driver.execute_script("location.reload(true);")
time.sleep(5)
try:
    # some Code
except Exception as z:
    # error handling


Driver.quit()
sys.exit()

正如你所看到的,我已经尝试了新的配置文件、删除了cookie、禁用了缓存,甚至硬重新加载,但无济于事

我有两个问题

  1. 这个网站如何知道连接是自动的吗?这个API要求如何在代码方面工作?(我知道拥有API的人可以对网站进行授权和身份验证的自动访问。)我想了解如何免费实现这一安全功能(我假设这不是OTP)因此不需要第三方服务)。它与密码要求有何不同? (我知道 API 密钥可能会被加密,但密钥和加密方法都不会改变,从而将整个事情简化为一个奇怪的长密码;对吗?)

  2. 我们如何使用 selenium-python-Firefox 绕过这个?

谢谢你们


让我们来分析一下这个问题以及 API 密钥在网页抓取中的作用。

  1. 网站如何检测自动化以及 API 密钥如何发挥作用:

  2. API 密钥基础知识: API 密钥本质上就像一个密码,允许访问特定服务(在本例中为税务门户)。它并非用于阻止访问网站,而是用于控制和监控对特定功能或数据的访问。

  3. 检测自动化: 网站可以使用多种方法来检测浏览器自动化,包括:

    • 用户代理字符串: 这会标识的浏览器和操作系统。自动化的浏览器通常具有不同的用户代理字符串。
    • 浏览器指纹: 网站可以检查各种浏览器设置和特征(例如,已安装的插件、屏幕分辨率、时区)以创建一个独特的“指纹”。自动化环境可能会泄露这些信息。
    • 行为模式: 人类和机器人以不同的方式与网站进行交互。机器人可能会执行操作(例如,以非常快的速度提交表单或以非典型模式移动鼠标)的速度比人类快得多。
  4. API 密钥的使用: 该网站可能要求提供 API 密钥,原因如下:

    • 使用限制: API 密钥有助于他们实施使用限制(例如,每个密钥每分钟允许的请求数),以防止滥用和服务器过载。
    • 用户跟踪: 他们可以使用 API 密钥来跟踪哪个用户或脚本正在进行哪些请求。
    • 安全性: 对于敏感的税务信息,要求提供 API 密钥可以作为一种额外的安全层,以确保只有授权用户才能访问这些数据。
  5. 使用 Selenium 绕过 API 密钥要求:

无法直接“绕过”合法的 API 密钥要求。 如果该网站专为需要 API 密钥才能访问某些功能而设计,那么试图绕过此功能将被视为违反其使用条款,并且可能是非法的,尤其是在涉及敏感数据时。

可能的选择(但可能不合适或不可行):

  • 检查开发者工具: 使用浏览器的开发者工具(在网络标签中)查看网站在正常使用过程中如何获取和使用 API 密钥。可能会找到生成或检索密钥的方法,但这种情况很少见。
  • 联系网站所有者: 询问该网站是否提供官方方式以编程方式访问所需的数据。他们可能有 API 文档或一种获取 API 密钥的程序。

重要的道德和法律考虑因素:

  • 始终尊重网站的使用条款。 抓取无权访问的数据可能会产生严重的后果。
  • 保护敏感数据。 税务信息极其敏感。确保在处理此类数据时遵守所有隐私法规并采取适当的安全措施。

简而言之: 虽然 Selenium 是一个强大的网络自动化工具,但它并非万能的。如果一个网站使用 API 密钥进行授权和速率限制,那么获取信息的最佳方法是通过官方和道德的方式。始终优先考虑道德考虑因素,并确保遵守网站的使用条款。

标签:python,selenium-webdriver,web-scraping,firefox
From: 78792258

相关文章

  • 如何从另一个 python 文件运行一个 python 文件
    我正在尝试从另一个python运行一个python文件,但是当涉及到调用另一个python文件中的方法时,它只会重新运行当前的python文件。我尝试了这段代码。我将导入放入log_user_in方法中,因为如果我将其导入到文件顶部,则会出现循环导入错误。这是我的代码片段fromtkinter......
  • 如何在Mac电脑上安装Python 2
    Python是一种高级编程语言,广泛应用于数据科学、网络开发、人工智能等领域。本文将介绍如何在Mac电脑上安装Python2,帮助初学者快速入门。一、下载Python2安装包在Python官网上下载Python2的安装包,网址为https://www.python.org/downloads/release/python-2718/ 。下载完......
  • 我的 python 抓取数据是空的,不确定我的代码出了什么问题
    我的结果是空的,不确定我的代码出了什么问题:这里是我的代码:#尝试从该网站获取数据https://www.watsons.com.sg/health/c/2100000?currentPage=1importrequestsfrombs4importBeautifulSoupimportpandasaspd#Settingdisplayoptionsforpandaspd.......
  • Chrome 浏览器更新后,我的 python tagui 代码工作不稳定。问题的解决方法是什么
    我编写了一个pythontagui脚本来在chrome中操作Intranet网页。它运行良好。但是在chrome浏览器更新后,脚本每次都会在某个时刻随机停止,并且也不会抛出错误。请帮忙。我尝试重新启动电脑,但这并没有解决问题。Chrome浏览器更新后,TagUI脚本工作不稳定的问题可能由以......
  • 如何从另一个文件运行 python 文件
    我正在尝试从另一个名为LoginOrReg的文件运行一个名为HabitTracker的python文件,但是当我这样做时,它会重新运行LoginOrReg文件。我已经尝试过这个classLoginOrReg:def__init__(self,db,cursor,login_username,data):self.db=mysql.connector.......
  • Python的字典和集合
    一、字典1.定义字典字典和列表虽然类似,但是字典是无序的可变序列,并且可以像查字典一样去查找。字典的元素都是成对出现的,每个元素都是由冒号“:”和键值对(“:”左边的称为键或者Key,“:”右边的称为值或者Value)构成的,用“{}”标识,元素之间用逗号“‘,”分隔。字典的键必须是唯一......
  • 在Python中字典是如何通过哈希表实现的以及哈希冲突是如何解决的
    哈希表(散列表)的工作原理哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。它通过哈希函数将输入的键(key)映射到表中的一个位置(即索引或槽位),从而以接近常数时间复杂度进行查找、插入和删除操作。哈希表的基本工作流程如下:哈希函数:哈希函数接受一个输入(键),并......
  • python cobs协议编解码算法demo
    1.SummaryCOBS(ConsistentOverheadByteStuffing)是一种算法,直译为一致的开销字节填充。简而言之,无论数据包的内容如何,都能通过产生高效可靠明确的数据包帧,从而使接受端能够从损坏的包中恢复。通常使用0x00来作为数据包的分隔符,即切割数据包的片分隔符。当使用0x00作为......
  • 如何将unicode编码为字节,以便可以检索到原始字符串?在Python 3.11中
    在python3.11中,我们可以对字符串进行编码,如:string.encode('ascii','backslashreplace')这对于说:hellö=>hell\\xf6但是当我插入时hellöw\\xf6rldIgethell\\xf6w\\xf6rld(注意第二个有一个看起来像字符转义序列的文字部分)......
  • python flask允许跨域
    flask接口支持跨域设置方法在Flask中,可以通过安装flask-cors扩展来支持跨域请求。下面是使用flask-cors扩展的示例代码:fromflaskimportFlaskfromflask_corsimportCORS#ipinstallflask-corsapp=Flask(__name__)CORS(app)可以通过CORS扩展的origins参数......