快速简单:Python Selenium,如何使用 xpath 获取此文本?

问题描述 投票:0回答:2

所需的输出是使用 xpath 打印:“Kallie”。我无法分享该网站的链接,因为它需要密码。

这是元素的屏幕截图。

当我右键单击突出显示的行 > 复制 > 复制完整 Xpath 时,我得到:

/html/body/div[2]/div[1]/div/div[3]/div/div[1]/article/a/span[1]/h5

以下是我根据 Stack Overflow 上提出的其他问题进行的尝试。

尝试1:

word = driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div/div[3]/div/div[1]/article/a/span[1]/h5')
print(word)

#PRINTS <selenium.webdriver.remote.webelement.WebElement (session="33b2fc3b827f954e5cb48bf50ce96567", element="D0BA6376742ACE33E80B5BB2696E9A74_element_154")>

尝试2:

word = driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div/div[3]/div/div[1]/article/a/span[1]/h5').text
print(word)

#PRINTS BLANK

尝试3:

word = driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div/div[3]/div/div[1]/article/a').text
print(word)

#PRINTS BLANK

尝试4:

word = driver.find_element(By.XPATH, '/html/body/div[2]/div[1]/div/div[3]/div/div[1]/article/a/span[1]//h5').text
print(word)

#PRINTS BLANK

尝试5:

word = driver.find_element(By.XPATH, '//html//body//div[2]//div[1]//div//div[3]//div//div[1]//article//a//span[1]//h5').text
print(word)

#PRINTS BLANK

尝试6:

word = driver.find_element(By.XPATH, '//h5').text
print(word)

#PRINTS BLANK

尝试7:

word = driver.find_element(By.TAG_NAME, "h5").text
print(word)

#PRINTS BLANK

尝试8:

for a in driver.find_elements(By.TAG_NAME, "h5"):
    print(a.text)

#PRINTS BLANK

尝试9:

for a in driver.find_elements(By.TAG_NAME, "//h5"):
    print(a.text)

#PRINTS BLANK

请帮助,谢谢爱你。

selenium-webdriver selenium-chromedriver selenium-ide selenium-grid
2个回答
0
投票

尝试 1 正在打印类信息和 GUID,因为您正在打印 WebElement 而不是包含的文本。通过访问

.text
,您将沿着#2 中的正确路径前进,但由于页面未完全加载,因此以及所有后续尝试都打印空白。您需要添加一个
WebDriverWait
以确保在访问
.text
之前元素可见。另一个主要问题是您使用的是绝对 XPath,它从
/html
开始,非常脆弱。这意味着即使页面的微小更新也更有可能破坏您的定位器。

如果无法访问实际页面,就很难为您提供一个非常好的定位器。 CSS 选择器应该可以工作,

#ascene_1626113 h5

-1
投票

这些你试过吗?

driver.find_element(By.XPATH, "//*[contains(@text, 'kallie')]")

或者

driver.find_element_by_xpath("//div[text()='kallie']")

© www.soinside.com 2019 - 2024. All rights reserved.