如何使用 Selenium 获取具有特定内容的 td 表? [复制]

Posted

技术标签:

【中文标题】如何使用 Selenium 获取具有特定内容的 td 表? [复制]【英文标题】:How can I get the table which has a td with specific content with Selenium? [duplicate] 【发布时间】:2018-01-25 22:11:23 【问题描述】:

我通过这个使用 selenium 进行网页抓取:

from selenium import webdriver
path_to_chromedriver = '/usr/lib/chromium-browser/chromedriver'
browser = webdriver.Chrome(executable_path=path_to_chromedriver)

browser.get(url)
element = browser.find_element_by_id('email')

现在我有一个网站,其中生成了很多嵌套表,并且似乎自动分配了 id(而且可能并非每次都相同)。可靠的一件事是我感兴趣的表格有一个单元格

<td>My Content</td>

有没有类似下面的东西?

browser.find_element_by_text("<td>", text="My Content")

【问题讨论】:

@JeffC Should comments saying “google it.” be flagged? 和 Should we downvote duplicates? 我对它投了反对票,因为工具顶部指出,“这个问题没有显示任何研究工作;它不清楚或没有用(再次单击以撤消)”并且您的问题没有显示任何研究工作。你完全编造了一些方法.find_element_by_text(),根本没有引用任何参考资料。这是一个非常常见的问题,如果您合理地尝试找到一个,那么您会在 SO 和整个网络上找到许多 QA。这表明我没有努力研究它。如果你用谷歌搜索,你用了什么关键词?您对大约 22k 代表的网站并不陌生。 【参考方案1】:

是的,您也可以找到文本匹配的元素:

使用xpath的contains()方法:

browser.find_element_by_xpath("//td[contains(text(),'My Content')]")

它将定位与文本匹配的元素(我们可以使用它进行部分匹配)

或者您可以使用text() 方法,例如:

browser.find_element_by_xpath("//td[text()='My Content']")

在这里你必须传递完整的字符串来匹配,包括空格。否则就不行了

【讨论】:

我试过browser.find_elements_by_xpath("//*[contains(text(), 'My Content')]")。您能解释一下以下内容吗? (1)开头的//是什么意思? (2)* 是什么意思? (3) 有没有可以推荐的 xpath 文档? 当然,1. // 用于相对路径 2. * 表示所有标签 - 使用您的 xpath,它会找到任何具有 My Content 文本的标签 有很多博客你可以得到这个selenium-by-arun.blogspot.in/2017/04/… 不错(+1)!我认为它很适合您的答案,因此您应该在此处添加它。如果您只是没有时间并且不介意,我会将其添加到您的答案中。还有一件事:在我拥有&lt;td&gt; 之后,我想拿到这张桌子。当然,我可以做el.find_element_by_xpath("../.."),这应该工作。但是如果我能以某种方式直接获得它所属的表会更好。这可能吗? //table[contains(.,'My Content')] 试试这个它会找到你的表,其中有文字My Content

以上是关于如何使用 Selenium 获取具有特定内容的 td 表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Selenium 获取整个页面的内容 [重复]

如何使用 java selenium 从显示无元素中获取文本

我们如何使用Selenium Webdriver C#从URL获取特定值?

如何通过 Selenium 自动化大型机

如何使用 Selenium 和 Java 单击具有 SVG 子项的链接?

如果 Selenium Java 中的“文本”匹配,如何获取动态表中的特定行值