使用Python Selenium获取Google翻译页面p、span标签文本问题求助
问题原因
你当前无法提取到文本主要有三个问题:
- 用
jsaction属性定位元素稳定性极低,该属性属于Google前端的动态事件绑定属性,会随页面渲染随机变动 - 固定0.5秒等待时间不足,网络波动或页面渲染延迟时,翻译结果还没加载完成就执行了元素提取操作
innerhtml拼写错误(正确为innerHTML),且普通.text方法会受元素可见性配置影响,经常拿不到异步渲染的内容
修正方案
import time from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC path = "C:\Program Files (x86)\chromedriver.exe" opt = Options() # 注意这里把myport替换成你实际的调试端口 opt.add_experimental_option("debuggerAddress", "Localhost:myport") driver = webdriver.Chrome(executable_path=path, options=opt) driver.get("https://translate.google.com/?hl=pl&sl=en&tl=pl&op=translate") # 输入原文 input_ele = driver.find_element(By.XPATH, "//textarea") input_ele.click() input_ele.send_keys("hey") # 显式等待翻译结果加载完成,最多等待10秒 wait = WebDriverWait(driver, 10) result_ele = wait.until(EC.presence_of_element_located( # 用稳定的jsname属性定位翻译结果元素 (By.XPATH, "//span[@jsname='W297wb']") )) # 提取文本,textContent兼容性最高,不受元素可见性影响 translate_result = result_ele.get_attribute("textContent") print(translate_result)
补充说明
如果后续遇到定位失效的情况,可以打开浏览器调试工具,直接在翻译结果文本上右键检查,找到承载文本的最内层span标签,用它的稳定属性(jsname、aria-label等)替换上面的定位条件即可。
内容的提问来源于stack exchange,提问作者Michał Wisełka
相关产品推荐
相关产品推荐

