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

使用Selenium的WebDriverWait登录Glassdoor时触发TimeoutException求助

解决Glassdoor登录超时问题

问题根源

你碰到的TimeoutException核心问题是登录按钮的定位逻辑错误:

  • 你使用的By.CSS_SELECTOR, "evpplnh1"完全无效:evpplnh1是Glassdoor动态生成的临时类名,页面每次加载都会变更;而且CSS选择器匹配类名必须加前缀.,你遗漏了这个规则。
  • 用presence_of_element_located仅检查元素是否存在,不确保元素可点击,换成element_to_be_clickable更适配点击操作的场景。

修复方案

1. 替换为可靠的定位方式

优先依赖按钮的静态属性定位,比如固定类名、按钮文本或type属性,避开动态生成的临时类:

  • XPATH:结合静态类gd-ui-button和按钮文本定位
  • CSS选择器:用多个静态类组合定位

2. 优化等待逻辑

减少冗余的time.sleep,尽量用WebDriverWait替代固定等待,提升脚本稳定性。

修复后的完整代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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.common.exceptions import TimeoutException, WebDriverException
import time
import pandas as pd  
from selenium.webdriver.common.action_chains import ActionChains

driver_path= r"C:\Users\TMaghsoudi\Desktop\chromedriver_win32.exe"
# Chrome配置项
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
options.add_experimental_option('excludeSwitches', ['enable-logging'])
# 初始化存储评价数据的列表
Pros =[]
Cons=[]
Re_Titles =[]
Re_rates= []
Employ_status= []
Re_dates = []

# 启动Chrome浏览器
driver = webdriver.Chrome(driver_path, options=options)
driver.get("https://www.glassdoor.co.in/Job/index.htm")

# 点击页面顶部登录按钮
WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CLASS_NAME, "HeaderStyles__signInButton"))
).click()

# 输入邮箱
email_input = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "modalUserEmail"))
)
email_input.send_keys("XXXXX")
email_input.send_keys(Keys.ENTER)

# 输入密码
pwd_input = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "modalUserPassword"))
)
pwd_input.send_keys("XXXX")

# 点击登录按钮(优先用文本+静态类定位,备选方案兼容本地化文本)
try:
    login_btn = WebDriverWait(driver, 15).until(
        EC.element_to_be_clickable(
            (By.XPATH, "//button[contains(@class, 'gd-ui-button') and text()='Sign In']")
        )
    )
    login_btn.click()
except TimeoutException:
    login_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(
            (By.CSS_SELECTOR, "button.gd-ui-button.minWidthBtn")
        )
    )
    login_btn.click()

额外注意事项

Glassdoor有严格的反爬机制,频繁操作容易触发验证码或账号限制,建议:

  • 添加真实用户代理:options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
  • 避免短时间内重复运行脚本
  • 可通过持久化Cookie的方式,减少重复登录次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:05:22