当前位置: 首页 > 知识库问答 >
问题:

python - selenium模拟登录,登录请求返回302,页面重定向后报404错误该怎么解决?

咸琪
2024-04-30

selenium模拟登录,登录请求返回302,页面重定向后报404错误

人工手动输入账号密码登录后,登录请求(login?service=http://best.youyuan.com/cas)返回302重定向到新的页面(https://best.youyuan.com/cas?ticket=ST-376416-ECsUQJ3kbHWZbDT...),此时重定向后页面是可以加载成功的。

但是使用selenium去自动输入账密登录后,登录请求也能成功返回302并立刻进行重定向,但是重定向之后的页面会404,我猜测是cookie丢失了,但是不知道该如何解决

左边是人工操作的结果,右边是selenium操作的结果

登录请求:
登录请求

重定向请求:
重定向请求

共有1个答案

包建义
2024-04-30

你猜测的可能是对的,Selenium 在处理 cookie 方面可能会有些问题,这可能导致重定向失败和 404 错误。下面是一些可能的解决方案:

  1. 启用隐式等待或显式等待:在 Selenium 中,页面元素的加载可能需要一些时间。如果你的代码在元素完全加载之前就尝试与其交互,可能会出现问题。你可以使用隐式等待或显式等待来确保页面元素在尝试与其交互之前已经完全加载。
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Firefox()driver.get("http://www.example.com")try:    element = WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.ID, "myDynamicElement"))finally:    driver.quit()
  1. 处理 cookie:你可以尝试在 Selenium 驱动器启动时加载之前会话的 cookie,或者在重定向后手动设置 cookie。
# 获取所有cookiecookies = driver.get_cookies()# 在需要的时候设置cookiefor cookie in cookies:    driver.add_cookie(cookie)
  1. 检查重定向 URL:确保 Selenium 重定向到的 URL 与人工操作重定向到的 URL 完全一致。有时候,URL 中的小差异(如查询参数或路径)可能导致 404 错误。
  2. 检查 headers 和其他请求参数:有些网站可能会检查请求的 headers 或其他参数,以确保请求来自有效的用户或浏览器。如果 Selenium 的默认 headers 或其他参数与真实浏览器的不同,可能会导致重定向失败。你可以尝试修改 Selenium 的 headers 或其他参数来匹配真实浏览器。
  3. 更新 Selenium 和 WebDriver:确保你使用的 Selenium 和 WebDriver 的版本是最新的。有时候,旧版本的软件可能存在已知的 bug 或问题。

如果以上方法都不能解决问题,你可能需要更深入地调查问题原因,例如查看网络请求和响应的详细信息,或者联系网站的管理员或开发者以获取帮助。

 类似资料:
  • 问题内容: 我正在做一个简单的论坛,由一系列论坛组成,每个论坛分别代表首页,主题,postitit,登录名和用户列表页面。在某些页面上,当用户未登录时会出现一个链接。 我想要实现的是在登录后触发重定向(在RequestDispatcher上使用forward()),以便浏览器返回到用户在单击登录链接之前所在的页面。为此,我看到了两种解决方案。 第一种解决方案是使用带有登录按钮的HTML 和一个不可

  • 记录器文件中的日志- org.springframework.Security.Access.event.loggerlistener-安全授权失败,原因是:org.springframework.Security.Access.accessdeniedexception:访问被拒绝;通过身份验证的主体:org.springframework.security.authentication.ano

  • 我在Laravel5.2中使用了php artisan函数。 我想重定向的客人登录页面,若客人点击链接,只有用户并没有客人。 我想在登录后将用户重定向到后面的页面。 我怎么能这么做?请详细展示一些文件名示例。 ///////编辑 路线 控制器 Kernel.php

  • 我使用的是Spring Security 4.1.1,但我遇到了一个问题:我试图访问URL,应用程序会重定向到登录页面。到现在为止,一直都还不错。 但是,成功登录后,应用程序会再次将我重定向到登录页面,并且不会创建任何会话,因此即使尝试直接访问URL(在URL栏中键入),应用程序也会重定向到登录页面。 有一些URL我必须要求登录才能访问它们。其他的,我可以访问无需身份验证。这些我不需要验证的URL

  • 我有一个文件,带有一个,具有和字段,在上,它用

  • 我刚开始研究Spring安全,遇到了一个问题。在登录表单中输入凭据后,用户将被重定向回登录页。 下面是我配置的SecurityConfiguration.java: } 登录表单: