可以通过打开浏览器开发者工具(按 F12 或右键选择“检查”),在“网络”标签中,找到与答案提交相关的请求(可以通过提交按钮操作后查看网络活动),点击这个请求,复制请求的 URL 和必要的 Headers。
本题提到需要使用 Session Cookie。Selenium 和 requests 需要共享相同的会话数据。
可以通过从 Selenium 获取 Cookies 并将其应用到 requests.Session 中来实现会话共享。
[Python] 纯文本查看 复制代码 # 从 Selenium 导出 Cookies 并应用到 requests.Session
cookies = driver.get_cookies()
for cookie in cookies:
session.cookies.set(cookie['name'], cookie['value'])
需要修正的问题:
1、你代码中的url 和 submit_url没有配置,必须用正确的路径替代。
2、除法的整除逻辑错误:应使用 //(整除运算符),而不是 /(浮点数)。
3、确保匹配运算符号:÷ 和 // 应被统一处理。
4、检查题目文本的提取逻辑:有时题目文本的 HTML 标签或编码方式可能与代码中的处理方式不一致。
以下是修改后的代码:
[Python] 纯文本查看 复制代码 import requests
import re
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
# URL设置
url = "http://example.com/question" # 替换为题目页面URL
submit_url = "http://example.com/submit" # 替换为提交答案的URL
# 初始化浏览器和会话
driver = webdriver.Chrome() # 请确保已安装Chrome驱动
session = requests.Session()
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
for i in range(50): # 解答50题
try:
# Step 1: 获取题目内容
driver.get(url)
time.sleep(2) # 等待页面加载
question_text = driver.find_element(By.TAG_NAME, "body").text
print("题目内容:", question_text)
# 匹配数字和运算符
match = re.search(r"(\d+)\s*([\+\-\*/×÷])\s*(\d+)", question_text)
if not match:
print("未找到题目格式")
break
# Step 2: 解析并计算答案
num1, operator, num2 = int(match.group(1)), match.group(2), int(match.group(3))
if operator == '+':
answer = num1 + num2
elif operator == '-':
answer = num1 - num2
elif operator in ['*', '×']:
answer = num1 * num2
elif operator in ['//', '÷']:
answer = num1 // num2 # 整除
print(f"解析结果:{num1} {operator} {num2} = {answer}")
# Step 3: 提交答案
# 获取 Selenium Cookies 并传递到 requests.Session
cookies = driver.get_cookies()
for cookie in cookies:
session.cookies.set(cookie['name'], cookie['value'])
post_data = {
'answer': answer
}
result = session.post(submit_url, data=post_data, headers=headers)
print("提交结果:", result.text)
# 控制解题速度,避免超过每题5秒
time.sleep(0.5)
except Exception as e:
print("发生错误:", e)
break
driver.quit() |