Selenium无法点击导航栏下拉菜单中Job Listing V2的问题
自动化脚本导航问题排查与解决
任务与问题
我正在编写自动化脚本完成以下任务:
- 使用Chrome打开目标网站
- 填写账号信息完成登录
- 导航至Job Listing V2标签页
- 在该页面输入产品条码
- 抓取搜索返回的XML数据并保存为XLS文件
- 重复处理下一个条码
目前卡在第三步,无论使用何种代码操作,页面始终停留在网站首页。
当前代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from webdriver_manager.chrome import ChromeDriverManager options = Options() options.add_experimental_option("detach", True) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) driver.maximize_window() driver.get("https://brands.silo.co.za/#/Job/JobListingV2") full_name_input = driver.find_element(By.ID, "Fullname") full_name_input.send_keys("Meeaad Bharoochi") full_name_input = driver.find_element(By.ID, "Password") full_name_input.send_keys("Password@1") submit_button = driver.find_element(By.CLASS_NAME, "btn-primary") submit_button.click() anchor_element = driver.find_element(By.LINK_TEXT, "Job Listing V2") anchor_element.click()
目标网站HTML结构片段
... <li class="dropdown"> <a href="javascript:return;" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> Jobs <span class="caret"></span> </a> <ul class="dropdown-menu"> <li> <a href="/#/Job/JobListingV2">Job Listing V2</a> ...
解决方案
核心问题是未等待页面元素加载完成,且下拉菜单需先展开才能定位子元素,修改方案如下:
用显式等待替代直接定位
登录后页面需要时间渲染导航栏,使用WebDriverWait等待元素可交互,避免因元素未加载导致定位失败。分步处理下拉菜单
先点击展开Jobs下拉菜单,再等待并点击"Job Listing V2"链接。
修改后的完整代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager options = Options() options.add_experimental_option("detach", True) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) wait = WebDriverWait(driver, 10) # 设置10秒超时等待 driver.maximize_window() driver.get("https://brands.silo.co.za/#/Job/JobListingV2") # 等待并填写账号信息 wait.until(EC.visibility_of_element_located((By.ID, "Fullname"))).send_keys("Meeaad Bharoochi") wait.until(EC.visibility_of_element_located((By.ID, "Password"))).send_keys("Password@1") # 等待并点击登录按钮 wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "btn-primary"))).click() # 等待并点击Jobs下拉菜单,展开选项 jobs_dropdown = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@class, 'dropdown-toggle') and contains(text(), 'Jobs')]"))) jobs_dropdown.click() # 等待下拉菜单中的Job Listing V2链接可点击,然后点击 wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Job Listing V2"))).click()
内容的提问来源于stack exchange,提问作者Meeaad Bharoochi
相关产品推荐
相关产品推荐

