#excel #vba #selenium #web-scraping #drop-down-menu
#excel #vba #селен #очистка веб-страниц #выпадающее меню
Вопрос:
В наши дни я работаю с selenium и vba, и у меня есть сомнения; когда я пытаюсь работать с выпадающим «dynamics», я не могу понять, почему мой webelement или selecelement не обновляется или выдает ошибку при обновлении выпадающего списка.
Например, мне приходится работать с веб-страницей, на которой есть таблица, два выбора и кнопка, подобная вводу, таблица изменяется только тогда, когда я выбрал опцию в обоих вариантах выбора.
для этого примера мы скажем:
у первого выбора есть идентификатор Select1. второй выбор имеет идентификатор Select2. таблица таблицы имеет идентификатор Table_1. кнопка ввода имеет идентификатор button1.
Таблица1 изменяется или обновляется только тогда, когда выбраны опции Select1 И Select2 (если выбрана только одна опция, таблица не изменяется и не обновляется)
В начале при открытии веб-страницы (webdriver) у Select1 и select2 нет опции select (вы знаете… «Выберите опцию»), конечно, у table_1 есть что-нибудь
для этого я использую:
Sub example()
'*// here a put code to initialize web driver and named WEB3
'*// in this part i have webpage opnened so...
'*//here i get my variables
Set GGT = WEB3.FindElementById("Select1").AsSelect
Set CBT = WEB3.FindElementById("Select2").AsSelect
Set SubElement = WEB3.FindElementByClass("button1")
'*//use this for to "play" with webpage
For Each i In GGT.Options
for each j in CBT.Options
GGT.SelectByIndex (i.Attribute("index"))
CBT.SelectByIndex (j.Attribute("index"))
subelment.click
Next
Next
end sub
ну, в этом пункте таблица зависит от двух выбранных;
Select1 и Select2 независимы, и оба являются статическими, я имею в виду, параметры всегда одинаковы
Вложенный элемент (кнопка) обновляет таблицу и оба выбирают начало (не обновляйте веб-страницу).
если я запускаю код, у меня не возникает никаких проблем: выберите 1, выберите вариант (1), Затем выберите 2, выберите его вариант (1), (2) и т. Д.; Вы знаете все комбинации, и таблица генерирует все таблицы. но если преобразовать Select2 и теперь select2 зависит от Select1, у меня есть следующее условие:
Select1 является статическим; Select2 является динамическим и зависит от select1, то есть предположим, что у Select1 есть 3 варианта фрукты, формы и цвета. но Select2 изменяется для каждого параметра в Select2 для этого примера, если Select1 — это фрукты, у select2 есть опции яблоко и груши; если Select1 — это формы, у select2 есть опции квадрат и круг, а если select1 — это цвет, select2 показывает красный и синий.
вот где у меня проблема, я не понимаю, что происходит, что генерирует ошибку
For Each i In GGT.Options
For Each j In CBT.Options
GGT.SelectByIndex (i.Attribute("index"))
CBT.SelectByIndex (j.Attribute("index")) '*//here show error 10 in
second iteration
subelement.click
Next
Next
сначала я подумал, что из-за изменения Select2 мне нужно обновить переменную CBT, поэтому добавил:
Установите CBT = WEB3.FindElementById(«Select2»).Выберите
между fors so…
For Each i In GGT.Options
Set CBT = WEB3.FindElementById("Select2").AsSelect
For Each j In CBT.Options
GGT.SelectByIndex (i.Attribute("index"))
CBT.SelectByIndex (j.Attribute("index")) '*//here show error 10 in
second iteration
subelement.click
Next
Next
но ошибка по-прежнему не работает, я не знаю, почему, если я обновляю CBT, не обновляйте его.
Я имею в виду, как в Excel, когда в ячейках (1,1) ставится = C2 F3, если я перемещаю ячейки F3 в r2, функция автоматически выполняется так, что «= C2 r2», но если я использую ключ supr или delet, изменяется только значение, которое получает функцию (0), НО если я щелкну правой кнопкой мыши по F3 ивыберите исключить ячейку, сгенерируйте ссылку на ошибку, потому что ячейки F3 были удалены, и поместите новый F3, я думаю, это произошло по этой причине, которую я добавил
Установите CBT = WEB3.FindElementById(«Select2»).Выберите
, чтобы получить новый Select2, но это не работает.
CBT может получить старый select2 и не получить новый select2
после того, как я попытался использовать явный код, то есть, не используйте переменные CBT, GGT и поместите все предложения, но все равно.
ИТАК, это мой вопрос; как использовать SET или обновить Webelement o Selectelement для-ДЛЯ с выпадающим списком.
или объяснение, почему не обновляется переменная, как и другие переменные, я имею в виду эту работу
Dim L as integer
L=4
L=5
L=L 5
эта работа
SET H=Webdriver.findelementbyid("kgkj")
SET H=Webdriver.findelementbyid("utut")
SET H=H.asselect
Но если я помещу его в FOR-FOR (прошу прощения, привычка FOR-FOR — это два вложенных for или FOR внутри ДЛЯ XD), это не сработает
Кто-нибудь, кто может объяснить мне, почему или как работать с этим небольшим примером с FOR-FOR и динамическим выпадающим списком.
прежде всего, спасибо
NT: я использую .asselect и findelmentbyid(), потому что некоторое время назад a использовал getelment и Select, но теперь я не знаю, почему этот синтаксис все еще не работает (я думаю, потому что использую VBA)
Комментарии:
1. У вас есть пример URL, который мы можем использовать для воспроизведения этого поведения, пожалуйста?
Ответ №1:
Должен ли ваш порядок отличаться? Если 2 изменения зависят от 1, то выбор на 1 я бы ожидал, что произойдет до установки 2 и зацикливания на 2.
For Each i In GGT.Options
GGT.SelectByIndex i.Attribute("index")
'possible wait condition here
Set CBT = WEB3.FindElementById("Select2").AsSelect
For Each j In CBT.Options
CBT.SelectByIndex j.Attribute("index")
subelement.click
Next
Next
Комментарии:
1. ….. (без удаления, без надстройки, без изменения позиции) и на эту ячейку ссылается другая ячейка, у которой есть функция (пример; «= Ячейки (1,1) ячейка (2,2)»), он выдает ошибку #ref, потому что ячейка перестала существовать, это то, что происходит, когда я помещаю внутрьДЛЯ-ДЛЯ.
2. да, я использую эту форму и не работает, проблема в том, что сначала установлен CBT внутри ДЛЯ работы, но когда GGT актуализирует el Select1 с опцией (2). selected; изменение select2 (потому что динамическое), в этот момент CBT выдает ошибку, потому что делает ссылку на select2, которая не завершается, потому что Select1,изменил его, и когда я пытаюсь обновить CBT с помощью другого набора CBT и получить новый Select2, он не работает, по-прежнему с Select2 (старый) и выдает ошибку 10 «Ссылка на объект, которого нет на странице» я пытаюсь объяснить на примере в Excel, когда вы удаляете ячейку
3. Вы имеете в виду изменения идентификатора? Что это меняет? Похоже, вам нужно сопоставить два выпадающих списка по позиции или чему-то, что остается общим для выбора.
4. Нет, идентификатор не меняется, именно по этой причине я не понимаю, что происходит, Ok Object «Select1» и «Select2» не меняются, chenge предназначен для «Options», который содержит Select», я имею в виду, что объект Select имеет идентификатор Select1 и имеет предопределенные параметры, которые не изменяются; Для select2сначала есть только опция по умолчанию (то есть ничего), когда выбираем1 «выбрать» 1 (опция (1).выбрано = true) это делает так, что выбираем2 получаем новые параметры (я привел пример), поэтому получаем опции (1), (2) и т. Д. И Это работает,но при выборе опции Select1 (2) select2 обновляет свои параметры и получает новые параметры, но сохраняет только параметр изменения идентификатора
5. Без веб-страницы для использования я не уверен, что еще сказать. Я бы ожидал, что приведенный выше ответ логически будет способом справиться с этим. Я бы ожидал условия ожидания перед установкой CBT = WEB3.FindElementById(«Select2»). Выберите, чтобы убедиться, что новые параметры заполнены. Вы пробовали добавлять ожидание перед этой строкой?