如何在Selenium中选择表单元格中的所有文本

2024-10-01 17:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

试图编写一个简单的脚本来提供表的所有单元格内容。在

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = 'http://127.0.0.1/html5css3'
driver = webdriver.Firefox()
driver.get(url)

table = driver.find_elements_by_xpath("//td//text()")

for t in table:
    print t

我还没有找到一个关于xpath语法的教程,它涵盖了从基础到高级。在

样本输入:

^{pr2}$

Tags: fromimport脚本httpurl内容driverselenium
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:07

当我运行你的程序时,我得到以下错误消息:

The result of the xpath expression "//td//text()" is: [object XrayWrapper [object Text]]. It should be an element.

果然,当我在lxml中运行该表达式时,我得到了一个字符串列表。在

显然,.find_elements*只想返回WebElements;它们不想返回字符串。在

根据您的更高要求,请尝试以下方法之一:

list_of_elements = driver.find_elements_by_xpath('//td') # return elements
list_of_text = [t.text for t in driver.find_elements_by_xpath('//td')] # return strings

不过,如果是我,我想在我的结果中有一些结构:

^{pr2}$

这样,您的目标就很容易实现:

My eventual goal is to do something like PRINT td[2] Where td[4] is greater than 3

print [row['Vehicle'] for row in list_of_dicts if int(row['Rating']) > 3]

下面是一个最终的程序,它可以满足您的需要:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = 'file:///tmp/x.html'
driver = webdriver.Firefox()
driver.get(url)

list_of_lists = [[td.text
                  for td in tr.find_elements_by_xpath('td')]
                  for tr in driver.find_elements_by_xpath('//tr')]
list_of_dicts = [dict(zip(list_of_lists[0],row)) for row in list_of_lists[1:]]

for t in list_of_dicts:
    if int(t['Rating']) > 3:
        print t['Vehicle']

相关问题 更多 >

    热门问题