python selenium, медленный xpath «все элементы».добавить тайм-аут - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно получить все элементы на странице и перебрать их для поиска каждого элемента.

в настоящее время я использую, driver.find_elements_by_xpath('//*[@*]')

Однако может быть задержка взавершив строку кода выше на больших страницах.Есть ли способ получить результаты с шагом 100 элементов?Или хотя бы добавить тайм-аут?

Завершение driver.find_elements_by_xpath('//*[@*]') внутри многопоточности - единственная причина, по которой я сейчас думаю, что могу решить эту проблему.

Мне нужно найти все элементы на странице, которые содержат определенныестроки.Например.elem.get_attribute('outerHTML').find('type="submit"') != -1… и так далее, и так далее… Мне также нужна их близость друг к другу для сравнения позиций индекса

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2019
import Globalz          ###### globals import is an empty .py file
import threading
import time
import ctypes


def find_xpath():
    for i in range(5):
        print(i)
        time.sleep(1)
    Globalz.curr_value = 'DONE!'

    ### this is where the xpath retrieval goes (ABOVE loop is for example purposes only)



def stopwatch(info):
    curr_time = 0
    failed = False
    Globalz.curr_value = ''
    thread1 = threading.Thread(target=info['function'])
    thread1.start()
    while thread1.is_alive() is True:
        if curr_time >= info['timeout']: failed = True; ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(thread1.ident), ctypes.py_object(SystemExit))
        curr_time += 1; time.sleep(1)
    if failed is True: return info['failed_returns']
    if failed is False: return Globalz.curr_value


betty = stopwatch({'function': find_xpath, 'timeout': 10, 'failed_returns': 'failed'})
print(betty)

Если кому-то интересно, вот решение.Я создал оболочку под названием секундомер ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...