使用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
相关产品推荐
相关产品推荐

