我有一个selenium python脚本,可以读取页面上的表格。该表有3列,第一列是ID列表,第3列是复选框。我遍历ID,直到找到我想要的ID,然后单击相应的复选框并保存。它工作正常,但非常慢,因为表可以是4K行。 这是当前代码(self.questionID是一个包含我正在寻找的ID的字典):
k, v in self.questionID.items():
foundQuestion = False
i = 1
while foundQuestion is False:
questionIndex = driver.find_element_by_xpath('/html/body/div[1]/form/table[2]/tbody/tr/td[1]/table/tbody/tr/td/fieldset[2]/div/table[1]/tbody/tr/td/table/tbody/tr/td/div/table/tbody[%d]/tr/td[1]' % i).text
if questionIndex.strip() == k:
d = i - 1
driver.find_element_by_name('selectionIndex[%d]' % d).click()
foundQuestion = True
i +=1
这是表的一个示例,只是前几行:
<thead>
<tr>
<th class="first" width="5%">ID</th>
<th width="90%">Question</th>
<th class="last" width="1%"> </th>
</tr>
</thead>
<tbody>
<tr>
<td class="rowodd">AG001 </td>
<td class="rowodd">Foo: </td>
<td class="rowodd"><input class="input" name="selectionIndex[0]" tabindex="30" type="checkbox"></td>
</tr>
</tbody>
<tbody>
<tr>
<td class="roweven">AG002 </td>
<td class="roweven">Bar </td>
<td class="roweven"><input class="input" name="selectionIndex[1]" tabindex="30" type="checkbox"></td>
</tr>
</tbody>
你可能猜到我不是蟒蛇忍者。是否有更快的方法来阅读此表并找到正确的行?
答案 0 :(得分:1)
您可以通过使用xpath表达式按文本搜索问题节点并在其后跟随兄弟td
及其input
找到相关的复选框一次 :
checkbox = driver.find_element_by_xpath('//tr/td[1][(@class="rowodd" or @class="roweven") and text() = "%s${nbsp}"]/following-sibling::td[2]/input[starts-with(@name, "selectionIndex")]' % k)
checkbox.click()
请注意,如果找不到问题及其相关复选框,它会抛出NoSuchElementException
。您可能需要捕获异常:
try:
checkbox = driver.find_element_by_xpath('//tr/td[1][(@class="rowodd" or @class="roweven") and text() = "%s${nbsp}"]/following-sibling::td[2]/input[starts-with(@name, "selectionIndex")]' % k)
checkbox.click()
except NoSuchElementException:
# question not found - need to handle it, or just move on?
pass