如何在SeleniumBase中提取元素文本及实现仅关闭当前标签页
问题解决方案
1. 修复h3标签文本提取的报错
报错'WebElement' object has no attribute 'get_text'是因为你错误地在WebElement对象上调用了SeleniumBase的get_text()方法——这个方法属于SB实例(即代码里的driver),而非单个WebElement。你可以通过两种方式解决:
方式一:利用driver的get_text方法,指定父元素范围
直接通过driver.get_text()并传入parent参数限定查找范围:
h3_tag = driver.get_text('h3', parent=element)
方式二:先找到h3子元素,再取文本属性
通过WebElement的find_element方法定位h3标签,再读取其text属性:
from selenium.webdriver.common.by import By h3_element = element.find_element(By.TAG_NAME, 'h3') h3_tag = h3_element.text
2. 实现仅关闭当前标签页而非整个浏览器
你遇到的driver.close()关闭整个浏览器的问题,大概率是窗口切换逻辑错误导致的。正确的流程应该是:点击链接前记录主窗口句柄,点击后定位新打开的标签页,关闭后切回主窗口。修改后的窗口切换逻辑如下:
# 点击链接前记录主窗口句柄 main_window = driver.get_current_window_handle() element.click() time.sleep(random.uniform(2, 6)) # 等待新窗口加载完成 # 获取所有窗口句柄,切换到新打开的标签页 all_windows = driver.get_window_handles() for window in all_windows: if window != main_window: driver.switch_to_window(window) break # 执行操作后关闭当前标签页 driver.close() # 切回主窗口 driver.switch_to_window(main_window)
完整修改后的代码
import time import random from selenium.webdriver.common.by import By from seleniumbase import SB def rel_prods(url, one_data): with SB(headed=True, uc=True) as driver: driver.open(url) time.sleep(26) driver.type('#header-search', one_data['title']) driver.click('button[data-auto="search-button"]') time.sleep(random.uniform(2, 6)) elements = driver.find_elements('a[data-auto="snippet-link"]') for element in elements: try: # 提取h3文本(方式一) h3_tag = driver.get_text('h3', parent=element) # 或者用方式二: # h3_element = element.find_element(By.TAG_NAME, 'h3') # h3_tag = h3_element.text print(h3_tag) # 处理窗口切换与关闭 main_window = driver.get_current_window_handle() element.click() time.sleep(random.uniform(2, 6)) all_windows = driver.get_window_handles() for window in all_windows: if window != main_window: driver.switch_to_window(window) break # 这里可添加新标签页的操作逻辑 time.sleep(random.uniform(2, 6)) # 关闭当前标签页 driver.close() # 切回主窗口 driver.switch_to_window(main_window) except Exception as e: print(e)
内容的提问来源于stack exchange,提问作者kuchuluk
相关产品推荐
相关产品推荐

