使用Selenium实现LinkedIn一键申请时循环点击职位报错求助
解决Selenium定位LinkedIn职位元素报错问题
我跟着教程写了一段Python脚本,想用Selenium实现LinkedIn职位列表的循环点击功能,但运行时一直报错。
我的代码如下:
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time username_input = "email@gmail.com" password_imput = "password" driver = webdriver.Chrome("C:/Users/JUAN/Documents/chromedriver/chromedriver.exe") driver.get("https://www.linkedin.com/jobs/search/?f_AL=true&geoId=100446943&keywords=data%20analyst&location=Argentina") sign_in_button = driver.find_element("link text","Sign in") sign_in_button.click() email_field = driver.find_element("id", "username") email_field.send_keys(username_input) password_field = driver.find_element("id","password") password_field.send_keys(password_imput) password_field.send_keys(Keys.ENTER) time.sleep(3) all_listings = driver.find_element("css selector","job-card-container--clickable") for listing in all_listings: print("called") listing.click() time.sleep(2)
报错信息:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"job-card-container--clickable"}
(Session info: chrome=103.0.5060.114)
问题原因及解决办法
- CSS选择器语法错误:类名作为CSS选择器时必须以
.开头,你写的job-card-container--clickable缺少前缀,正确写法是.job-card-container--clickable。 - 元素定位方式错误:
find_element仅返回第一个匹配元素,要获取所有职位列表需用复数形式find_elements,否则无法循环遍历。 - 硬编码等待不可靠:
time.sleep(3)无法保证页面完全加载,替换为Selenium显式等待,确保元素加载完成后再定位。 - 变量拼写错误:原代码中
password_imput拼写错误,修正为password_input避免后续变量问题。
修改后的代码示例:
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 import time username_input = "email@gmail.com" password_input = "password" driver = webdriver.Chrome("C:/Users/JUAN/Documents/chromedriver/chromedriver.exe") driver.get("https://www.linkedin.com/jobs/search/?f_AL=true&geoId=100446943&keywords=data%20analyst&location=Argentina") # 等待登录按钮加载 sign_in_button = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.LINK_TEXT, "Sign in")) ) sign_in_button.click() # 等待用户名输入框加载 email_field = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "username")) ) email_field.send_keys(username_input) # 等待密码输入框加载 password_field = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "password")) ) password_field.send_keys(password_input) password_field.send_keys(Keys.ENTER) # 等待所有职位列表加载完成 all_listings = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".job-card-container--clickable")) ) for listing in all_listings: print("called") listing.click() time.sleep(2)
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

