Како сачекати да се страница учита са селеном

How Wait Page Load With Selenium



Док се веб аутоматизација или стругање веба помоћу Селениум веб управљачког програма може суочити с проблемима као што елемент који желите да изаберете није доступан или дугме које желите да притиснете није спремно за клик итд.

Разлог за то је што Селениум веб управљачки програм мора да преузме веб страницу и доврши исцртавање странице пре него што било шта учините на њој. У прошлости је веб сервер генерисао садржај веб локације, а прегледач га је само преузео и исцртао. Ових дана имамо много веб страница са једном страницом које раде мало другачије. У веб страницама за једну страницу (СПА), веб сервер служи само кодовима интерфејса. Једном када се кодни интерфејс генерише у прегледачу, фронтенд код користи АЈАКС да захтева АПИ податке од веб сервера. Када интерфејс прими АПИ податке, он их приказује у прегледачу. Дакле, иако је прегледач завршио са преузимањем и приказивањем веб странице, веб страница још увек није спремна. Морате сачекати да прими податке АПИ -ја и да их такође прикаже. Дакле, решење овог проблема је сачекати да подаци буду доступни пре него што било шта урадимо са Селениум -ом.







У Селенијуму постоје 2 врсте чекања:
1) Имплицитно чекање
2) Експлицитно чекање



1) Имплицитно чекање: Ово је најлакше применити. Имплицитно чекање говори Селениум веб управљачком програму да сачека неколико секунди да ДОМ (модел објекта документа) буде спреман (веб страница мора бити спремна).



2) Експлицитно чекање: Ово је мало сложеније од имплицитног чекања. У изричитом чекању, кажете Селениум веб управљачком програму шта да чека. Селен чека да се испуни тај услов. Када се испуни, Селениум веб управљачки програм ће бити спреман да преузме друге команде. Обично је експлицитно време чекања променљиво. Зависи од тога колико брзо су услови испуњени. У најгорем случају, експлицитно чекање ће чекати колико и имплицитно чекање.





У овом чланку ћу вам показати како да сачекате (имплицитно и експлицитно) да се страница учита селеном. Дакле, почнимо.

Предуслови:

Да бисте испробали команде и примере овог чланка, морате имати,



1) Линук дистрибуција (по могућности Убунту) инсталирана на вашем рачунару.
2) Питхон 3 инсталиран на вашем рачунару.
3) ПИП 3 инсталиран на вашем рачунару.
4) Питхон виртуаленв пакет инсталиран на вашем рачунару.
5) Мозилла Фирефок или Гоогле Цхроме веб прегледачи инсталирани на вашем рачунару.
6) Морате знати како инсталирати Фирефок Гецко управљачки програм или Цхроме веб управљачки програм.

Да бисте испунили услове 4, 5 и 6, прочитајте мој чланак Увод у Селениум са Питхоном 3 на Линукхинт.цом.

Можете пронаћи многе чланке о другим темама на ЛинукХинт.цом . Обавезно их проверите ако вам је потребна помоћ.

Постављање директоријума пројекта:

Да бисте све одржали организованим, креирајте нови директоријум пројекта селен-чекај/ као што следи:

$мкдир -пвселен-чекај/возачи

Идите до селен-чекај/ директоријум пројекта на следећи начин:

$ЦДселен-чекај/

Направите Питхон виртуелно окружење у директоријуму пројекта на следећи начин:

$виртуаленв .венв

Активирајте виртуелно окружење на следећи начин:

$извор.венв/сам/активирати

Инсталирајте Селениум помоћу ПИП3 на следећи начин:

$ пип3 инсталирајте селен

Преузмите и инсталирајте све потребне веб управљачке програме у возачи/ именик пројекта. У свом чланку сам објаснио процес преузимања и инсталирања веб управљачких програма Увод у Селениум са Питхоном 3 . Ако вам је потребна помоћ, претражите даље ЛинукХинт.цом за тај чланак.

За демонстрацију у овом чланку користићу веб прегледач Гоогле Цхроме. Дакле, користићу хромирани управљач бинарни из возачи/ именик.

Да бисте експериментисали са имплицитним чекањем, направите нову Питхон скрипту ек01.пи у директоријуму вашег пројекта и откуцајте следеће редове кодова у тој датотеци.

фромселенаувозвебдривер
фромселена.вебдривер.заједнички.кључеве увозКључеви
Опције=вебдривер.ЦхромеОптионс()
Опције.без главе = Истина
прегледач=вебдривер.Хром(екецутабле_патх='./дриверс/цхромедривер',Опције=Опције)
прегледач.имплицитно_чекајте(10)
прегледач.добити('хттпс://ввв.униктиместамп.цом/')
временска ознака=прегледач.финд_елемент_би_кпатх('// х3 [@] [1]')
принт('Тренутна временска ознака: %с'%(временска ознака.текст.разделити('')[0]))
прегледач.Близу()

Када завршите, сачувајте ек01.пи Питхон скрипта.

Линија 1 и 2 увозе све потребне компоненте селена.

Ред 4 ствара објекат Цхроме опција.

Ред 5 омогућава режим без главе за веб управљачки програм Цхроме.

Ред 7 ствара објекат прегледача Цхроме користећи хромирани управљач бинарни из возачи/ именик.

Ред 8 се користи да каже Селениум -у да имплицитно чека 10 секунди користећи имплицитно_ваит () метод претраживача.

Ред 10 учитава ввв.униктиместамп.цом у прегледач.

Ред 12 проналази елемент временске ознаке помоћу КСПатх селектора // х3 [@цласс = ’тект-хазард’] [1] и складишти га у временска ознака променљива.

Одабрао сам КСПатх бирач из Цхроме Девелопер Тоол -а. Као што видите, временска ознака је у првом х3 елемент са именом класе текстуална опасност . Постоје 2 х3 елементи са класом текстуална опасност .

Линија 13 штампа само временску ознаку са елемента који сам изабрао помоћу КСПатх селектора и сачувао у временска ознака променљива.

Ред 14 затвара прегледач.

Када завршите, покрените Питхон скрипту ек01.пи као што следи:

$ питхон3 ек01.пи

Као што видите, тренутна временска ознака је издвојена са униктиместамп.цом и одштампана на конзоли.

Рад са експлицитним чекањем:

Да бисте експериментисали са експлицитним чекањем, креирајте нову Питхон скрипту ек02.пи у директоријуму вашег пројекта и откуцајте следеће редове кодова у тој датотеци.

фромселенаувозвебдривер
фромселена.вебдривер.заједнички.кључеве увозКључеви
фромселена.вебдривер.заједнички.од стране увозОд стране
фромселена.вебдривер.подршка.лук увозВебДриверВаит
фромселена.вебдривер.подршка увозочекивани_услови
Опције=вебдривер.ЦхромеОптионс()
Опције.без главе = Истина
прегледач=вебдривер.Хром(екецутабле_патх='./дриверс/цхромедривер',Опције=Опције)
прегледач.добити('хттпс://ввв.униктиместамп.цом/')
покушати:
временска ознака=ВебДриверВаит(прегледач, 10).све док(
очекивани_услови.присуство_елемента_лоцирано((Од стране.КСПАТХ, '
// х3 [@] [1] '
))
)
принт('Тренутна временска ознака: %с'%(временска ознака.текст.разделити('')[0]))
коначно:
прегледач.Близу()

Када завршите, сачувајте ек02.пи Питхон скрипта.

Ред 1-5 увози све потребне компоненте из библиотеке Селениум.

Ред 7 ствара објекат Цхроме опција.

Ред 8 омогућава режим без главе за веб управљачки програм Цхроме.

Ред 10 ствара објекат прегледача Цхроме користећи хромирани управљач бинарни из возачи/ именик.

Ред 12 учитава ввв.униктиместамп.цом у прегледач.

Експлицитно чекање имплементирано је у блоку покушај коначно (из реда 14-20)

Ред 15-17 користи креира ВебДриверВаит () објекат. Први аргумент ВебДриверВаит () је објекат претраживача, а други аргумент је максимално дозвољено време (најгори сценарио) за испуњење услова, што је у овом случају 10 секунди.

У све док() блокирати, очекивани_услови.присутност_елемента_лоцатед () метода се користи да би се уверило да је елемент присутан пре него што покушате да изаберете елемент. Овде, Би.КСПАТХ користи се за исказивање присуство_елемента_лоцирано () метод за избор елемента користили смо КСПатх селектор. Бирач КСПатх је // х3 [@цласс = ’тект-хазард’] [1] .

Када се елемент пронађе, он се складишти у временска ознака променљива.

Ред 18 штампа само временску ознаку од изабраног елемента.

Коначно, ред 19-20 затвара прегледач.

Када завршите, покрените ек02.пи Питхон скрипта на следећи начин:

$ питхон3 ек02.пи

Као што видите, тренутна временска ознака са униктиместамп.цом одштампана је на конзоли.

Избор елемената у експлицитним чекањима:

У претходном одељку сам користио Би.КСПАТХ за избор елемента помоћу КСПатх селектора. Елементе можете изабрати и помоћу ИД -а, назива ознаке, назива класе ЦСС, бирача ЦСС -а итд.

У наставку су наведене подржане методе одабира:

Би.КСПАТХ - Бира елемент/елементе помоћу КСПатх селектора.

Аутор.ЦЛАСС_НАМЕ - Бира елемент/елементе користећи назив ЦСС класе.

Би.ЦСС_СЕЛЕЦТОР - Бира елемент/елементе помоћу ЦСС селектора.

Би.ИД - Бира елемент према ИД -у

Поименце - Бира елемент/елементе по имену.

Аутор.ТАГ_НАМЕ - Бира елемент/елементе према називу ХТМЛ ознаке.

Аутор.ЛИНК_ТЕКСТ - Бира елемент/елементе према тексту везе од до (сидро) ХТМЛ ознака.

Аутор.ПАРТИАЛ_ЛИНК_ТЕКСТ - Бира елемент/елементе према тексту делимичне везе од до (сидро) ХТМЛ ознака.

За више информација о њима посетите Страница са документацијом Питхон Селениум АПИ .

Очекивани услови у експлицитним чекањима:

У ранијем примеру експлицитног чекања користио сам присуство_елемента_лоцирано () начин очекивани_услови као експлицитни услов чекања да се уверим да елемент који сам тражио постоји пре него што га изаберем.

Постоје и други очекивани_услови можете користити као изричит услов чекања. Неки од њих су:

титле_ис (наслов) - проверава да ли је наслов странице наслов .

титле_цонтаинс (парцијални_наслов) - проверава да ли наслов странице садржи део наслова парцијални_наслов .

висибилити_оф (елемент) - проверава да ли је елемент је видљиво на страници која има елемент ширине и висине веће од 0.

висибилити_оф_елемент_лоцатед (лоцатор) -

присуство_елемента_лоцирано (локатор) - Уверите се да се елемент налази (поред локатор ) је присутан на страници. Тхе локатор је торпа од (Би, селектор), као што сам показао у примеру експлицитног чекања.

присуство_свог_елемента_лоцирано () - Постара се да се сви елементи подударају са локатор је присутан на страници. Тхе локатор је (Би, селектор) тупле.

тект_то_бе_пресент_ин_елемент (локатор, текст) - Проверава да ли је текст је присутан у елементу који се налази поред локатор . Тхе локатор је (Би, селектор) тупле.

елемент_то_бе_цлицкабле (локатор) - Проверава да ли се елемент налази поред локатор је видљив и на њега се може кликнути. Тхе локатор је (Би, селектор) тупле.

елемент_то_бе_селецтед (локатор) - Проверава да ли се елемент налази поред локатор је изабран. Тхе локатор је (Би, селектор) тупле.

алерт_ис_пресент () - очекујте да ће дијалог упозорења бити присутан на страници.

Има их још много очекивани_услови доступна за коришћење. За више информација о њима посетите Страница са документацијом Питхон Селениум АПИ .

Закључак:

У овом чланку сам расправљао о имплицитним и експлицитним чекањима Селениум -а. Такође сам вам показао како се ради са имплицитним и експлицитним чекањем. Увек би требало да покушате да користите експлицитно чекање у својим Селениум пројектима јер ће Селениум покушати да смањи време чекања што је више могуће. На овај начин нећете морати да чекате одређени број секунди сваки пут када покренете своје Селениум пројекте. Експлицитно чекање требало би да уштеди много секунди.

За више информација о чекању селена посетите званична библиотека Селениум Питхон чека на страницу са документацијом .