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

Python Selenium爬Glassdoor评论:搜索选列表第一项报错解决

解决Glassdoor爬取中的AttributeError: 'NoneType' object has no attribute 'send_keys'错误

错误原因

你代码中触发错误的核心问题在于这行代码:

Company=driver.find_element(By.ID,"sc\.keyword").send_keys("Amazon")

send_keys()方法执行后返回的是None,因此Company变量被赋值为None,后续调用Company.send_keys(Keys.ENTER)时,自然会抛出AttributeError: 'NoneType' object has no attribute 'send_keys'。

另外,你写的ID选择器"sc\.keyword"存在冗余转义,Glassdoor搜索框的实际ID是sc.keyword,不需要加反斜杠,这也可能导致元素定位失败,进一步加剧问题。

修复方案

  1. 拆分元素定位与操作
    先单独定位搜索框元素,再分别执行输入和回车操作:
# 正确定位搜索框,去掉不必要的反斜杠
search_box = driver.find_element(By.ID, "sc.keyword")
# 输入公司名称
search_box.send_keys("Amazon")
# 发送回车触发搜索
search_box.send_keys(Keys.ENTER)
  1. 优化元素定位稳定性
    尽量用WebDriverWait替代time.sleep,确保元素加载完成后再操作,同时修正导航栏元素的定位语法(By.CLASS_NAME不支持CSS伪类,改用By.CSS_SELECTOR):
# 等待导航栏第二个元素可点击后点击
WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".siteHeader__HeaderStyles__navigationItem:nth-child(2)"))
).click()

# 等待搜索框加载完成
search_box = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.ID, "sc.keyword"))
)
search_box.send_keys("Amazon")
search_box.send_keys(Keys.ENTER)
  1. 清理冗余代码
    你重复初始化了两次Chrome Driver,删掉其中一次,避免资源浪费:
# 删掉重复的这一行
# driver = webdriver.Chrome(driver_path, chrome_options=options)

修复后相关代码片段

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  

driver_path= r"C:\Users\TMaghsoudi\Desktop\chromedriver_win32.exe"

# chrome options
options = webdriver.ChromeOptions()
# options.add_argument("--start-maximized")
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
options.add_experimental_option('excludeSwitches', ['enable-logging'])

# 仅初始化一次driver
driver = webdriver.Chrome(driver_path, chrome_options=options)

# get url
url = "https://www.glassdoor.co.in/Job/index.htm"
driver.get(url)

time.sleep(3)
driver.find_element(By.CLASS_NAME, "HeaderStyles__signInButton").click()

time.sleep(5)

Enter_email= driver.find_element(By.ID, "modalUserEmail")
Enter_email.send_keys("XXXXXX")
Enter_email.send_keys(Keys.ENTER)
Enter_pass= driver.find_element(By.ID,"modalUserPassword")
Enter_pass.send_keys("XXXXX")

SingIn= WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='d-flex align-items-center flex-column']/button[@class='gd-ui-button mt-std minWidthBtn css-1dqhu4c evpplnh0']")))
SingIn.click()

time.sleep(5)
driver.set_window_size(1120, 1000)

# 修正导航栏元素定位语法
WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".siteHeader__HeaderStyles__navigationItem:nth-child(2)"))
).click()

# 正确处理搜索框操作
search_box = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.ID, "sc.keyword"))
)
search_box.send_keys("Amazon")
search_box.send_keys(Keys.ENTER)

内容的提问来源于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.04 06:35:15