You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:55