使用Selenium抓取Semrush中burton.com数据遇报错及登录问题求助
解决Semrush数据抓取的Selenium问题
一、DeprecationWarning 警告处理
这类警告源于Selenium版本与旧语法不兼容,比如find_element_by_*系列方法已被弃用,处理方式如下:
- 替换旧定位语法:改用
By类指定定位方式,需先导入from selenium.webdriver.common.by import By,例如:# 旧写法 # driver.find_element_by_xpath("//div[@class='score']") # 新写法 driver.find_element(By.XPATH, "//div[@class='score']") - 更新Selenium版本:执行
pip install --upgrade selenium升级到最新稳定版,避免版本兼容问题
二、NoSuchElementException 错误排查
这个错误是代码找不到目标元素,核心原因大概率和未登录有关,结合其他可能原因逐一解决:
- 必须登录免费账号:Semrush的核心数据(权威评分、自然流量、反向链接)仅对登录用户开放,未登录状态下页面不会渲染这些元素。需在脚本中加入登录逻辑:
# 跳转登录页 driver.get("https://www.semrush.com/login/") # 输入账号密码(替换为你的免费账号信息) driver.find_element(By.ID, "email").send_keys("your-email@example.com") driver.find_element(By.ID, "password").send_keys("your-password") # 提交登录 driver.find_element(By.XPATH, "//button[@type='submit']").click() # 等待登录完成后,再跳转至burton.com的分析页 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until(EC.url_contains("dashboard")) driver.get("https://www.semrush.com/analytics/overview/?q=burton.com") - 等待元素加载完成:页面动态渲染时,直接定位元素会失败,用显式等待替代强制等待:
# 等待权威评分元素加载,最长等待10秒 authority_score = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div.authority-score")) ).text - 检查iframe嵌套:如果目标元素在iframe内,需先切换到iframe再定位:
# 找到目标iframe并切换上下文 iframe = driver.find_element(By.ID, "analytics-frame") driver.switch_to.frame(iframe) # 执行元素定位操作... # 操作完成后切回主文档 driver.switch_to.default_content()
三、反爬与稳定性优化
- 加入随机延迟:Semrush有反爬机制,每次操作后添加
time.sleep(random.uniform(2, 5))避免频繁请求被封 - 优化定位方式:优先使用ID、CSS选择器代替XPATH,减少因页面结构变动导致的定位失效
内容的提问来源于stack exchange,提问作者John Burton
相关产品推荐
相关产品推荐

