硒-通过文本(td / tr)查找xpath

时间:2018-07-05 15:03:35

标签: python html selenium selenium-webdriver selenium-chromedriver

我有一个很大的电子邮件HTML表,我试图找到特定电子邮件的名称,然后在此元素中选择一个按钮。我可以通过XPATH轻松找到表主体:

//*[@id="reportList"]/tbody

然后该表中有多行(tr),是否可以在所有表​​行中搜索文本?

我最近得到的是:

driver.find_element(By.XPATH, '//*[@id="reportList"]/tbody[contains(text(), "example text")]')

不幸的是,这找不到元素。

html code

我知道我可以简单地复制XTR来查找特定的tr,但是出于自动化的目的,我试图传递一个字符串,然后在所有tr内搜索我的特定文本。

3 个答案:

答案 0 :(得分:2)

获取xpath的三个选项:

XPATH= //*[@id='reportList']//*[contains(text(), 'example text')]

如果您的文字带有tr:

XPATH= //*[@id='reportList']/tbody//tr[contains(text(), 'example text')]

如果您的文字带有td:

XPATH= //*[@id='reportList']/tbody//tr//td[contains(text(), 'example text')]

答案 1 :(得分:1)

据我所知,表具有trtd,可能您需要td。因此,xPath可能是这样的:

driver.find_element(By.XPATH, "//*[@id='reportList']/tbody//td[contains(text(), 'example text')]")

其中...tbody//td...表示它将在td的所有子节点tbody中进行搜索。因此,td不应是tbody

的直接子代

PS,我还将添加wait方法以确保该元素存在:

# will wait up to 10 seconds until element will be present on the page
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//*[@id='reportList']/tbody//td[contains(text(), 'example text')]"))
    )

注意:您必须进行一些导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

答案 2 :(得分:0)

我是python硒的新手。我可以使用此行

打印 if(command === "send") { if(message.author.id !== "593964642934718494" ) {return message.channel.send("You cannot use this command! Only MHA 5 can.")} let member = message.mentions.members.first() || message.guild.members.get(args[0]); member.send(`Current Group Link (hi) `) const embed = { "description": "Sent a group link to the user, successfully.", "color": 839999, "timestamp": (n) }; 中的文本
td

对于我来说,我想遍历行并单击行(XPATH= //*[@id='reportList']//*[contains(text(), 'example text')] )的第一列(td)中的链接,该链接在第三列中具有文本“ CREATED”( tr