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

使用爬虫登录Upwork遭Cloudflare拦截,求解决方案或是否改用Selenium

解决Upwork登录爬虫被Cloudflare拦截的问题

核心原因

Cloudflare的反爬机制会检测浏览器指纹(JS执行能力、Cookie状态、请求头完整性等),cloudscraper仅能绕过基础验证,但Upwork的防护更严格,再加上你提交的表单数据不完整(缺少隐藏验证字段),导致验证失败后跳转回登录页。

先尝试优化cloudscraper方案

不用直接换Selenium,先完善请求流程:

  • 抓取所有表单字段:登录页面的表单包含隐藏的验证字段(如CSRF令牌、login[_token]等),必须从初始GET请求的HTML中提取这些字段并加入表单数据,否则服务器会直接拒绝请求。
    修改后的示例代码:
    from bs4 import BeautifulSoup
    import cloudscraper
    
    url = "https://www.upwork.com/ab/account-security/login"
    username = "你的用户名"
    password = "你的密码"
    scraper = cloudscraper.create_scraper()
    
    def main():
        # 初始请求获取页面及表单字段
        response = scraper.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 提取表单内所有输入字段(含隐藏项)
        form_data = {}
        form = soup.find('form')
        for input_tag in form.find_all('input'):
            name = input_tag.get('name')
            if name:
                form_data[name] = input_tag.get('value', '')
        
        # 替换用户名和密码字段
        form_data['login[username]'] = username
        form_data['login[password]'] = password
        
        # 补充请求头,保持一致性
        headers = {
            'Referer': url,
            'User-Agent': scraper.headers['User-Agent']
        }
        
        # 确认表单提交的目标URL(可能不是当前页面)
        form_action = form.get('action')
        if not form_action.startswith('http'):
            form_action = "https://www.upwork.com" + form_action
        
        response = scraper.post(form_action, data=form_data, headers=headers)
        
        # 检查登录状态
        if "dashboard" in response.url:
            print("登录成功")
        else:
            print("仍被拦截,需进一步处理")
    
    if __name__ == "__main__":
        main()
    
  • 更新cloudscraper版本:执行pip install --upgrade cloudscraper,新版本会跟进Cloudflare的验证规则更新。

改用Selenium的必要性

如果上述优化后还是被拦截,直接换Selenium是更稳妥的选择:
Selenium模拟真实浏览器行为,能自动处理Cloudflare的JS验证(甚至人机验证),更难被检测。注意以下细节:

  • 使用undetected-chromedriver替代原生Selenium,它能绕过Chrome的自动化标识检测;
  • 添加等待时间,模拟真实用户操作节奏;
  • 避免快速连续操作,降低被识别风险。

示例Selenium代码片段:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import undetected_chromedriver as uc

def main():
    driver = uc.Chrome()
    driver.get("https://www.upwork.com/ab/account-security/login")
    
    # 等待用户名输入框加载
    username_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "login[username]"))
    )
    username_input.send_keys("你的用户名")
    
    # 点击继续按钮
    continue_btn = driver.find_element(By.ID, "login_password_continue")
    continue_btn.click()
    
    # 等待密码输入框加载
    password_input = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "login[password]"))
    )
    password_input.send_keys("你的密码")
    
    # 点击登录按钮
    login_btn = driver.find_element(By.ID, "login_control_continue")
    login_btn.click()
    
    # 验证登录成功
    WebDriverWait(driver, 10).until(
        EC.url_contains("dashboard")
    )
    print("登录成功")
    driver.quit()

if __name__ == "__main__":
    main()

额外提示

Upwork的反爬机制非常严格,即便登录成功,后续操作也可能被检测。如果是技术挑战,先确认是否允许使用爬虫工具,避免违反平台规则导致账号封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:22