设置向上
我的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>
?
答案 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