Я перемещаюсь по динамической веб-странице с помощью Selenium. Страница загружает контент динамически в зависимости от того, по какой ссылке нажимает пользователь, не влияя на адрес веб-страницы. Например, ниже приведен исходный код HTML по одной из ссылок:
Как видно, событие JS onclick для этого конкретного местоположенияэто openLocation(L_52)
. Для другой ссылки это может быть openLocation(L_73)
и т. Д. Я могу смоделировать щелчок по этой ссылке со следующей строкой кода:
location = driver.execute_script("openLocation('L_52')")
Я пытаюсь перейти по каждой из этих ссылок. Проблема в том, что эти события JS onclick не в последовательном порядке;они имеют вид openLocation(L_x)
, где x
может быть любым случайным положительным целым числом.
Таким образом, я не мог написать цикл for, такой как следующий, для последовательной навигации по всем из них:
for k in range(num_locations):
location = driver.execute_script("openLocation('L_{}')".format(str(k)))
Это приводит к тому, что некоторые местоположения пропускаются всякий раз, когда местоположение n+1
отсутствует после местоположения n
.
Так что вместо этого мне пришлось прибегнуть к переходу через все динамические ссылкивручную на странице перечислите номера мест в списке, а затем пройдитесь по этому списку, чтобы перемещаться по каждому из этих мест:
loc_nums = [52, 53, 54, 55, 101, 56, 6, 7, 41, 57, 58]
for l in loc_nums:
location = driver.execute_script("openLocation('L_{}')".format(str(l)))
Но, очевидно, этот подход не является устойчивым, если число ссылок велико,Итак, я хочу знать, есть ли способ запустить какое-либо событие JS onclick, которое имеет строку openLocation('L_
, за которой следует любое положительное целое число, за которым следует строка ')
.
PS: Я знаю, как сопоставить шаблон в заданной строке с регулярными выражениями:
import re
re.findall(r"openLocation\('L_[0-9]+'\)", "openLocation('L_52')")
Но весь вопрос в том, что строки не заданы- Я не знаю, каким будет точное название события onclick в следующей ссылке, без предварительного щелчка по нему, поскольку это динамическая веб-страница.