用Selenium迭代tr中的tr

时间:2018-02-23 10:13:03

标签: python selenium

设置向上

我的WordPress后端有一个表,有几行。每行包含一个我想用Selenium打开的链接。

也就是说,我想循环遍历<tr>中的每个<tbody>

browser定义为,

browser = webdriver.Firefox(executable_path='mypath')

<tbody>具有通常的形式,

 <tbody>
    <tr>...</tr>
    ...
    <tr>...</tr>
 </tbody>
到目前为止

代码

  • <tr>

导航到正确的页面后,

tbody = browser.find_element_by_css_selector('.widefat > tbody:nth-child(2)')

browser.find_element_by_xpath('//*[@title="Dutch: Add translation"]').click()

正确选择了<tbody>元素,并正确打开了第一个<tr>的右侧链接。

  • 循环<tr>

我不知道如何在<tr>中的所有<tbody>上成功循环播放此内容。

我尝试了以下内容,

tbody = browser.find_element_by_css_selector('.widefat > tbody:nth-child(2)')

for row in tbody.find_element_by_xpath('./tr'):
    browser.find_element_by_xpath('//*[@title="Dutch: Add translation"]').click()

但这会给TypeError: 'FirefoxWebElement' object is not iterable

显然,tbody.find_element_by_xpath('./tr')不是选择所有<tr>的正确方法。

如何正确选择所有<tr>

3 个答案:

答案 0 :(得分:8)

for row in tbody.find_element_by_xpath('./tr')打算迭代单个 WebElement,同时需要遍历列表元素:

for row in tbody.find_elements_by_xpath('./tr')

答案 1 :(得分:4)

使用(注意s):

tbody.find_elements_by_xpath('./tr')

而不是:

tbody.find_element_by_xpath('./tr')

仅返回第一场比赛。

答案 2 :(得分:0)

您可以使用之前指定的find_element_by_xpath方法,也可以使用我更喜欢使用的find_elements_by_tag_name

tbody_rows = tbody.find_elements_by_tag_name('tr')
for tbody_row in tbody_rows:
    #do your stuff here with each row in turn