Селен

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

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

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

У селенијуму постоје 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.

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

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

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

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

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

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

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

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

Закључак:

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

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

Вулкан за кориснике Линука
Са сваком новом генерацијом графичких картица видимо да програмери игара помичу границе графичке верности и долазе на корак од фотореализма. Али упрко...
ОпенТТД вс Симутранс
Стварање сопствене симулације превоза може бити забавно, опуштајуће и изузетно примамљиво. Због тога морате да испробате што више игара како бисте про...
Водич за ОпенТТД
ОпенТТД је једна од најпопуларнијих игара за пословну симулацију. У овој игри морате створити диван посао превоза. Међутим, почет ћете у почетку око 1...