Тема: AHK: ожидание загрузки страницы, лайк на ФБ
Здравствуйте. Использую биб. chrome.ahk
Продолжаю делать накрутку лайков на фб, в целом прототип уже работает, однако не стабильно, ну на то он и прототип. Вернулся к старой проблеме.
В общем, надо было дожидаться загрузку страницы, потом лайкать и закрывать вкладку. Встроенный метод WaitForLoad работает плохо. Мне посоветовали переделать таймер, на ожидание загрузки конкретного элемента, а не страницы через "readyState". Так я и сделал. Но у страницы ФБ есть несколько "состояний". Из тех что я заметил, 3: "ошибка контента (очень редко)", "обычное состояние (очень часто)" и "альтернативное состояние(редко)".
По алгоритму скрипт открывает фб -> дожидается элемента -> действует -> закрывает вкладку. Скрипт обрабатывает эти состояния, однако, он часто срывается и делает выводы, не дождавшись загрузки страницы.
Не могли бы вы помочь разобраться с этой ситуацией? Если будет не лень, проверить скрипт можно без стороннего сайта, просто открывая страницу фб с фоткой для лайка, например эту: Пример. И запуская скрипт во время загрузки страницы.
Хотелось бы избавится от лишнего "Sleep" в начале и добавить надежности. Видео скрипта:
https://drive.google.com/file/d/1Wwg4HZ … sp=sharing 1080p
F3::
sleep, 1000
page_facebook := Chrome.GetPageByTitle("Facebook", MatchMode:="contains")
; массив блоков div, включая "нравится"
like_fb_length_arr_js =
(
document.querySelectorAll('div.oajrlxb2.gs1a9yip.g5ia77u1.mtkw9kbi.tlpljxtp.qensuy8j.ppp5ayq2.goun2846.ccm00jje.s44p3ltw.mk2mc5f4.rt8b4zig.n8ej3o3l.agehan2d.sk4xxmp2.rq0escxv.nhd2j8a9.pq6dq46d.mg4g778l.btwxx1t3.pfnyh3mw.p7hjln8o.kvgmc6g5.cxmmr5t8.oygrvhab.hcukyx3x.tgvbjcpo.hpfvmrgz.jb3vyjys.rz4wbd8a.qt6c0cv9.a8nywdso.l9j0dhe7.i1ao9s8h.esuyzwwr.f1sip0of.du4w35lb.lzcic4wl.abiwlrkh.p8dawk7l').length;
)
while (page_facebook.Evaluate(like_fb_length_arr_js).value == 0)
{
sleep, 100
tooltip, NO Download
}
tooltip, Download
; проверка на "ошибка контента (очень редко)"
if (page_facebook.Evaluate("document.querySelector('span.d2edcug0.hpfvmrgz.qv66sw1b.c1et5uql.rrkovp55.a8c37x1j.keod5gw0.nxhoafnm.aigsh9s9.ns63r2gh.fe6kdd0r.mau55g9w.c8b282yb.iv3no6db.o3w64lxj.b2s5l15y.hnhda86s.m9osqain.oqcyycmt')").subtype != "null")
{
tooltip, Error content
page_facebook.Disconnect()
WinClose, A
return
}
else tooltip, No Error content
; проверка на "альтернативное состояние(редко)" + лайк
if (page_facebook.Evaluate("document.querySelector('div.oajrlxb2.rh7womw9.g5ia77u1.mtkw9kbi.tlpljxtp.qensuy8j.ppp5ayq2.goun2846.ccm00jje.s44p3ltw.mk2mc5f4.rt8b4zig.n8ej3o3l.agehan2d.sk4xxmp2.rq0escxv.nhd2j8a9.q4pta889.mg4g778l.btwxx1t3.rmfx599b.p7hjln8o.kvgmc6g5.cxmmr5t8.oygrvhab.hcukyx3x.tgvbjcpo.hpfvmrgz.jb3vyjys.rz4wbd8a.qt6c0cv9.a8nywdso.l9j0dhe7.i1ao9s8h.esuyzwwr.f1sip0of.du4w35lb.lzcic4wl.abiwlrkh.p8dawk7l.q4j490t4.bn9dirzp')").subtype != "null")
{
tooltip, Alternative OK
page_facebook.Evaluate("document.querySelector('div.oajrlxb2.rh7womw9.g5ia77u1.mtkw9kbi.tlpljxtp.qensuy8j.ppp5ayq2.goun2846.ccm00jje.s44p3ltw.mk2mc5f4.rt8b4zig.n8ej3o3l.agehan2d.sk4xxmp2.rq0escxv.nhd2j8a9.q4pta889.mg4g778l.btwxx1t3.rmfx599b.p7hjln8o.kvgmc6g5.cxmmr5t8.oygrvhab.hcukyx3x.tgvbjcpo.hpfvmrgz.jb3vyjys.rz4wbd8a.qt6c0cv9.a8nywdso.l9j0dhe7.i1ao9s8h.esuyzwwr.f1sip0of.du4w35lb.lzcic4wl.abiwlrkh.p8dawk7l.q4j490t4.bn9dirzp').click()")
page_facebook.WaitForLoad()
page_facebook.Disconnect()
WinClose, A
return
}
else tooltip, No alternative
; обычное состояние + лайк
like_fb_js =
(
var elementsArrFb = document.querySelectorAll('div.oajrlxb2.gs1a9yip.g5ia77u1.mtkw9kbi.tlpljxtp.qensuy8j.ppp5ayq2.goun2846.ccm00jje.s44p3ltw.mk2mc5f4.rt8b4zig.n8ej3o3l.agehan2d.sk4xxmp2.rq0escxv.nhd2j8a9.pq6dq46d.mg4g778l.btwxx1t3.pfnyh3mw.p7hjln8o.kvgmc6g5.cxmmr5t8.oygrvhab.hcukyx3x.tgvbjcpo.hpfvmrgz.jb3vyjys.rz4wbd8a.qt6c0cv9.a8nywdso.l9j0dhe7.i1ao9s8h.esuyzwwr.f1sip0of.du4w35lb.lzcic4wl.abiwlrkh.p8dawk7l');
var index = 0;
var elementFinal = 0;
for (index; index < elementsArrFb.length; ++index) {
if (elementsArrFb[index].innerText == 'Нравится' && (elementFinal = elementsArrFb[index]))
break;
}
if (elementFinal != 0) {
elementFinal.click();
}
else {
elementFinal = null;
}
)
if (page_facebook.Evaluate(like_fb_js).type = "object")
{
tooltip, Like error
return
}
else
{
page_facebook.WaitForLoad()
page_facebook.Disconnect()
WinClose, A
tooltip, Like complete
}
return
*WaitForLoad() добавлены на всякий случай