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

Python Selenium通过Gmail自动登录Indeed的问题求助

问题描述
  • 使用Python Selenium通过Gmail账号自动登录Indeed时,普通Firefox/Chrome Driver会触发Google安全检测,提示:

    无法登录。此浏览器或应用可能不安全

  • 改用undetected_chromedriver规避检测后,又出现NoSuchElementException,无法找到“Continue with Google”按钮。

普通Driver代码示例:

login_url='https://secure.indeed.com/auth?hl=en_US&co=US&continue=https%3A%2F%2Fwww.indeed.com%2F&tmpl=desktop&service=my&from=gnav-util-homepage&jsContinue=https%3A%2F%2Fwww.indeed.com%2F&empContinue=https%3A%2F%2Faccount.indeed.com%2Fmyaccess&_ga=2.36143904.1242603427.1673200412-1007460264.1673200412'

driver = webdriver.Firefox(options=options, capabilities=caps, service=serv)
# driver = uc.Chrome()
# driver.delete_all_cookies()

driver.get(login_url)
time.sleep(4)

window_before = driver.window_handles[0]

google = driver.find_element(By.XPATH,'//*[@id="login-google-button"]')
google.click()
time.sleep(4)

window_after = driver.window_handles[1]
driver.switch_to.window(window_after)

emailBox = driver.find_element(By.XPATH,"//input[@type='email']")
emailBox.send_keys('email@gmail.com')
emailBox.send_keys(Keys.ENTER)
time.sleep(7)
driver.get_screenshot_as_file("screenshot.png")
# passwordBox = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,"//input[@type='password']")))
passwordBox = driver.find_element(By.XPATH,"//input[@type='password']")

passwordBox.send_keys('password')
passwordBox.send_keys(Keys.ENTER)
time.sleep(7)

driver.switch_to.window(window_before)

undetected_chromedriver代码示例:

login_url='https://secure.indeed.com/auth?hl=en_US&co=US&continue=https%3A%2F%2Fwww.indeed.com%2F&tmpl=desktop&service=my&from=gnav-util-homepage&jsContinue=https%3A%2F%2Fwww.indeed.com%2F&empContinue=https%3A%2F%2Faccount.indeed.com%2Fmyaccess&_ga=2.36143904.1242603427.1673200412-1007460264.1673200412'
driver = uc.Chrome()
# driver.delete_all_cookies()
wait = WebDriverWait(driver, 5)

test = driver.get(login_url)
time.sleep(4)

window_before = driver.window_handles[0]

try:
    driver.find_element(By.XPATH, '//*[@id="login-google-button"]').click()
except NoSuchElementException:
    print("No Such Element Exception")
解决方案

1. 修复元素定位问题

  • 修正XPATH转义引号:代码中"是HTML转义字符,直接替换为普通引号即可,正确XPATH应为'//*[@id="login-google-button"]'或"//*[@id='login-google-button']",避免解析错误。
  • 用显式等待替代固定sleep:固定sleep稳定性差,改用WebDriverWait等待元素可点击,确保页面完全加载:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    wait = WebDriverWait(driver, 10)
    google_btn = wait.until(EC.element_to_be_clickable((By.ID, "login-google-button")))
    google_btn.click()
    
  • 处理Cookie同意弹窗:Indeed登录页可能有Cookie授权弹窗,需先关闭:
    try:
        cookie_accept = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Accept All')]")))
        cookie_accept.click()
    except:
        pass  # 若没有弹窗则跳过
    

2. 优化undetected_chromedriver配置

添加启动选项增强隐身性,避免被网站检测:

import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--start-maximized")  # 最大化窗口,避免元素因窗口过小隐藏

driver = uc.Chrome(options=options)

3. 完整可运行代码

import undetected_chromedriver as uc
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.common.keys import Keys

login_url = 'https://secure.indeed.com/auth?hl=en_US&co=US&continue=https%3A%2F%2Fwww.indeed.com%2F&tmpl=desktop&service=my&from=gnav-util-homepage&jsContinue=https%3A%2F%2Fwww.indeed.com%2F&empContinue=https%3A%2F%2Faccount.indeed.com%2Fmyaccess&_ga=2.36143904.1242603427.1673200412-1007460264.1673200412'

# 配置undetected_chromedriver
options = uc.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--start-maximized")

driver = uc.Chrome(options=options)
wait = WebDriverWait(driver, 15)

try:
    driver.get(login_url)

    # 处理Cookie弹窗
    try:
        cookie_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Accept All')]")))
        cookie_btn.click()
    except:
        pass

    # 等待并点击Google登录按钮
    google_btn = wait.until(EC.element_to_be_clickable((By.ID, "login-google-button")))
    google_btn.click()

    # 切换到Google登录窗口
    wait.until(lambda d: len(d.window_handles) > 1)
    driver.switch_to.window(driver.window_handles[1])

    # 输入邮箱
    email_box = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@type='email']")))
    email_box.send_keys('your_email@gmail.com')
    email_box.send_keys(Keys.ENTER)

    # 输入密码
    password_box = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@type='password']")))
    password_box.send_keys('your_password')
    password_box.send_keys(Keys.ENTER)

    # 切换回Indeed窗口
    wait.until(lambda d: len(d.window_handles) == 1)
    driver.switch_to.window(driver.window_handles[0])

    print("登录成功")
except Exception as e:
    print(f"错误: {str(e)}")
    driver.get_screenshot_as_file("error_screenshot.png")
finally:
    # 关闭浏览器
    driver.quit()

额外注意事项

  • 确保undetected_chromedriver版本与本地Chrome版本匹配,避免兼容性问题。
  • 若仍遇到Google安全验证,可尝试添加常用用户代理,或使用已登录的Chrome用户数据目录(需配置options.add_argument(r"user-data-dir=C:\Users\YourUser\AppData\Local\Google\Chrome\User Data")),但注意多线程冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:40:59