我正在尝试通过 Selenium-Python-Firefox 与所得税门户(此网站 https://eportal.venuetax.gov.in/iec/foservices/#/login )进行通信,并对此感到震惊打开时
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、禁用了缓存,甚至硬重新加载,但无济于事
我有两个问题
-
这个网站如何知道连接是自动的吗?这个API要求如何在代码方面工作?(我知道拥有API的人可以对网站进行授权和身份验证的自动访问。)我想了解如何免费实现这一安全功能(我假设这不是OTP)因此不需要第三方服务)。它与密码要求有何不同? (我知道 API 密钥可能会被加密,但密钥和加密方法都不会改变,从而将整个事情简化为一个奇怪的长密码;对吗?)
-
我们如何使用 selenium-python-Firefox 绕过这个?
谢谢你们
让我们来分析一下这个问题以及 API 密钥在网页抓取中的作用。
-
网站如何检测自动化以及 API 密钥如何发挥作用:
-
API 密钥基础知识: API 密钥本质上就像一个密码,允许访问特定服务(在本例中为税务门户)。它并非用于阻止访问网站,而是用于控制和监控对特定功能或数据的访问。
-
检测自动化: 网站可以使用多种方法来检测浏览器自动化,包括:
- 用户代理字符串: 这会标识的浏览器和操作系统。自动化的浏览器通常具有不同的用户代理字符串。
- 浏览器指纹: 网站可以检查各种浏览器设置和特征(例如,已安装的插件、屏幕分辨率、时区)以创建一个独特的“指纹”。自动化环境可能会泄露这些信息。
- 行为模式: 人类和机器人以不同的方式与网站进行交互。机器人可能会执行操作(例如,以非常快的速度提交表单或以非典型模式移动鼠标)的速度比人类快得多。
-
API 密钥的使用: 该网站可能要求提供 API 密钥,原因如下:
- 使用限制: API 密钥有助于他们实施使用限制(例如,每个密钥每分钟允许的请求数),以防止滥用和服务器过载。
- 用户跟踪: 他们可以使用 API 密钥来跟踪哪个用户或脚本正在进行哪些请求。
- 安全性: 对于敏感的税务信息,要求提供 API 密钥可以作为一种额外的安全层,以确保只有授权用户才能访问这些数据。
-
使用 Selenium 绕过 API 密钥要求:
无法直接“绕过”合法的 API 密钥要求。 如果该网站专为需要 API 密钥才能访问某些功能而设计,那么试图绕过此功能将被视为违反其使用条款,并且可能是非法的,尤其是在涉及敏感数据时。
可能的选择(但可能不合适或不可行):
- 检查开发者工具: 使用浏览器的开发者工具(在网络标签中)查看网站在正常使用过程中如何获取和使用 API 密钥。可能会找到生成或检索密钥的方法,但这种情况很少见。
- 联系网站所有者: 询问该网站是否提供官方方式以编程方式访问所需的数据。他们可能有 API 文档或一种获取 API 密钥的程序。
重要的道德和法律考虑因素:
- 始终尊重网站的使用条款。 抓取无权访问的数据可能会产生严重的后果。
- 保护敏感数据。 税务信息极其敏感。确保在处理此类数据时遵守所有隐私法规并采取适当的安全措施。
简而言之: 虽然 Selenium 是一个强大的网络自动化工具,但它并非万能的。如果一个网站使用 API 密钥进行授权和速率限制,那么获取信息的最佳方法是通过官方和道德的方式。始终优先考虑道德考虑因素,并确保遵守网站的使用条款。
标签:python,selenium-webdriver,web-scraping,firefox From: 78792258