Итерация через стол в селене Очень медленно

У меня есть сценарий selenium python, который читает таблицу на странице. Таблица имеет 3 столбца, первый – список идентификаторов, а третий – флажок. Я повторяю идентификаторы до тех пор, пока не найду тот, который я хочу, затем нажмите соответствующий флажок и сохраните. Он работает нормально, но очень медленный, так как таблица может быть 4K строк. Это текущий код (self.questionID – это словарь с идентификаторами, которые я ищу):

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%">&nbsp;</th> </tr> </thead> <tbody> <tr> <td class="rowodd">AG001&nbsp;</td> <td class="rowodd">Foo:&nbsp;</td> <td class="rowodd"><input class="input" name="selectionIndex[0]" tabindex="30" type="checkbox"></td> </tr> </tbody> <tbody> <tr> <td class="roweven">AG002&nbsp;</td> <td class="roweven">Bar&nbsp;</td> <td class="roweven"><input class="input" name="selectionIndex[1]" tabindex="30" type="checkbox"></td> </tr> </tbody> 

Как вы, наверное, можете догадаться, что я не ниндзя python. Есть ли более быстрый способ прочитать эту таблицу и найти правильную строку?

One Solution collect form web for “Итерация через стол в селене Очень медленно”

Вы можете найти соответствующий флажок за один раз , используя выражение 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 
  • Как навести указатель мыши на python Webdriver
  • Очистить текст от textarea с селеном
  • Python Selenium 2.39 и Firefox 26
  • Ошибка при запуске PhantomJS с Selenium RemoteWebDriver
  • Python Selenium Как нажать кнопку рядом с определенным текстом?
  • Ошибка Selenium «Элемент больше не привязан к DOM» при очистке данных
  • Render HTTP Response (HTML-контент) в selenium webdriver (браузер)
  • Ошибка Selenium Webdriver: «Невозможно загрузить профиль»
  • TimeOutException при использовании link_text с явным ожиданием в selenium webdriver с python
  • Как я могу щелкнуть кнопку в форме с помощью Selenium и Python 2.7?
  • Интернет-исследователь Selenium python
  • Python - лучший язык программирования в мире.