You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫代码遇400 Bad Request错误:URL访问与元素点击异常求助

问题:访问指定URL时出现400 Bad Request错误

编写代码时遇到问题:尝试打开指定URL并点击页面元素时,出现400 Bad Request错误。以下是我的代码:

def had_val(url, ip, num):
    driver = webdriver.Chrome('chromedriver')
    driver.header_overrides = {
        'USER-AGENT':'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/103.0.5060.63 Mobile/15E148 Safari/604.1',
        'X-FORWARDED-FOR':str(ip),
        'msisdn':str(num),
        'Access-Control-Allow-Credentials':'True',
        'Access-Control-Allow-Headers':'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With',
        'Access-Control-Allow-Methods':'POST, GET, OPTIONS, DELETE, PUT',
        'Access-Control-Max-Age':'3600',
        'Cache-Control':'no-cache, must-revalidate, private',
        'X-FRAME-OPTIONS':'SAMEORIGIN'
    }
    time.sleep(3)
    driver.get(url)
    try :
        driver.find_element(by=By.XPATH,value='//*[@id="submitbtn"]').click()
        driver.implicitly_wait(10)
    except NoSuchElementException as exception:
        print("Button not found and test failed")

    time.sleep(10)
    driver.quit()


my_file = open('http_proxies.txt')
all_the_lines = my_file.readlines()
ip_range = []
for i in all_the_lines:
    ip_range.append(str(i))
    

def pass_data():
    urls= 'https://affnet.gotrackier.com/t/MjM1XzI4Mg/?p1={tid}'
    wb = openpyxl.load_workbook("Book2.xlsx")
    sheet = wb.active
    m_row = sheet.max_row
    for row in sheet.iter_rows(min_row=1, min_col=1, max_row=m_row, max_col=1):
        for cell in row:
            secure_random = random.SystemRandom()
            random_ip = secure_random.choice(ip_range)
            print(random_ip,"and",cell.value)
        had_val(urls,random_ip,cell.value)
pass_data() 

可能的原因及修复方案

1. 请求头包含无效字段

你添加了大量服务器响应头(比如Access-Control-Allow-Credentials、Access-Control-Allow-Methods),这些是服务器返回给浏览器的头,不是浏览器发送请求时需要携带的。服务器收到非法请求头会直接返回400错误。

修复:只保留必要的请求头:

# 只保留客户端需要发送的请求头
driver.header_overrides = {
    'USER-AGENT':'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/103.0.5060.63 Mobile/15E148 Safari/604.1',
    'X-FORWARDED-FOR':str(ip),
    'msisdn':str(num)
}

2. URL参数未替换

urls变量中的{tid}占位符没有被替换成实际值,导致URL格式无效,服务器无法解析。

修复:调用had_val时替换参数:

had_val(urls.format(tid=cell.value), random_ip, cell.value)

3. IP地址包含换行符

从文件读取IP时,readlines()会保留每行末尾的\n换行符,导致X-FORWARDED-FOR头的IP格式错误。

修复:读取时去除换行符:

for i in all_the_lines:
    ip_range.append(str(i).strip())

4. ChromeDriver设置请求头的方式错误

原生webdriver.Chrome没有header_overrides属性,直接设置不会生效,需要通过ChromeOptions配置。

修复:用ChromeOptions添加请求头:

from selenium.webdriver.chrome.options import Options

def had_val(url, ip, num):
    chrome_options = Options()
    headers = {
        'USER-AGENT':'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/103.0.5060.63 Mobile/15E148 Safari/604.1',
        'X-FORWARDED-FOR':str(ip),
        'msisdn':str(num)
    }
    for key, value in headers.items():
        chrome_options.add_argument(f'--header={key}:{value}')
    
    driver = webdriver.Chrome('chromedriver', options=chrome_options)
    driver.implicitly_wait(10)  # 提前设置隐式等待
    driver.get(url)
    # 后续代码不变

5. 隐式等待位置错误

driver.implicitly_wait(10)应该放在初始化driver之后,这样才能对后续所有元素查找生效,而不是点击元素之后才设置。

内容的提问来源于stack exchange,提问作者rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:24:11