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,不需要加反斜杠,这也可能导致元素定位失败,进一步加剧问题。
修复方案
- 拆分元素定位与操作
先单独定位搜索框元素,再分别执行输入和回车操作:
# 正确定位搜索框,去掉不必要的反斜杠 search_box = driver.find_element(By.ID, "sc.keyword") # 输入公司名称 search_box.send_keys("Amazon") # 发送回车触发搜索 search_box.send_keys(Keys.ENTER)
- 优化元素定位稳定性
尽量用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)
- 清理冗余代码
你重复初始化了两次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
相关产品推荐
相关产品推荐

