1 (изменено: Botsy, 2021-02-07 03:25:15)

Тема: AHK: проверить загружена ли страница на 100%, chrome.ahk

Есть ли более нормальный способ дождаться загрузку страницы в хроме ?


#NoEnv
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, RegEx
#Include Chrome.ahk

page := Chrome.GetPageByTitle("")
while (page.Evaluate("document.readyState").value != "complete")
sleep, 100

page.Disconnect()
return

Насколько понял из вебинара про биб. chrome, это проблемное место. Там это функция WaitForLoad(), однако она работает странно. Функция действительно ждет пока значение страницы не будет "complete", но такое ощущение, что нужно еще и ждать пока страница отобразиться в хроме. В 3 из 10 случаев отправка js на страницу работать не будет.

Может кто-то сталкивался с таким?

GD

2

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Можно ожидать появления конкретного элемента.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

А вы сталкивались с такой проблемой ?

GD

4

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Не знаю, что именно вы имеете в виду. Страница после полной загрузки html действительно может быть ещё не сформирована полностью, так как иногда некоторые её элементы могут создаваться посредством джаваскриптов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Botsy, 2021-02-07 00:51:21)

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Переделал для конкретного элемента (лайк на фэйсбуке), но всё равно бывает не срабатывает и возвращает 0, еще до того, как страница загрузится.


#NoEnv
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, RegEx
#Include Chrome.ahk

page_facebook := Chrome.GetPageByTitle("Facebook", MatchMode:="contains")
page_facebook.WaitForLoad()

	like_fb_js = 
	(
		var i = 0;
		var index = 0;
		var elementFinal = 0;
		while (i <= 5000) {
			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');
			if (elementsArrFb.length != 0) {
                for (index; index < elementsArrFb.length; ++index) {
					if (elementsArrFb[index].innerText == 'Нравится') {
						var elementFinal = elementsArrFb[index];
						break;
					}
				}
				i++;
				break;
			} else {
				i++
				continue;
			}
		}
		elementFinal.click();
	)

msgBox, % IsObject(page_facebook.Evaluate(like_fb_js))
page.Disconnect()
return
GD

6

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Надо не 5000, а по таймеру ждать, пока точно не появится.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

teadrinker Стал переделывать, не могу получить в ahk значение длины массива из js, всегда выводит 0.


page_facebook := Chrome.GetPageByTitle("Facebook", MatchMode:="contains")

msgbox, % page_facebook.Evaluate("document.querySelectorAll('div.oajrlxb2').length").value

Как правильно вывести это значение ?

GD

8

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Botsy пишет:
page_facebook.Evaluate("document.querySelectorAll('div.oajrlxb2').length").value

Здесь ошибки нет, если возвращает 0, значит ничего не найдено, возможно, загрузиться не успели.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Точно, я затупил. Два часа искал ошибку, почему всегда возвращало 0? А всего-то у меня было открыто много окон с именем facebook и он брал значение с первого попавшегося, как я понял. Лол кек.

GD

10

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Изменил, все работает норм и ничего не проскакивает как при WaitForLoad().


like_facebook(page_facebook) {

	like_fb_length_arr_js =
	(
		document.querySelectorAll('div.oajrlxb2').length;
	)

	while (page_facebook.Evaluate(like_fb_length_arr_js).value == 0)
	{
		sleep, 100
	}
	
	like_fb_js = 
	(
		var elementsArrFb = document.querySelectorAll('div.oajrlxb2');
		var index = 0;
		var elementFinal = 0;
		for (index; index < elementsArrFb.length; ++index) {
			if (elementsArrFb[index].innerText == 'Нравится') {
 						elementFinal = elementsArrFb[index]
						break;
				}
			}
		elementFinal.click();
	)

	page_facebook.Evaluate(like_fb_js)
	page_facebook.WaitForLoad()
	page_facebook.Disconnect()

return
}

Проблема решена.

GD

11

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

А не проще ли напрямую отправлять запросы на сервер через WinHttpRequest?

12

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Malcev Оу, я думал про это. С WinHttpRequest научился отправлять данные на свой сервер и там их обрабатывать через php или получать данные с страницы. Нет понимая как это можно применить в моём случае. Был выбор либо попробовать программно через chrome.ahk, либо эмулирование + анализ экрана.

Пробую сделать небольшую накрутку лайков в фб. Есть сервис, где ты выполняешь задание других (ставишь лайки например) и за это получаешь очки, а потом можешь сам создавать задание для других, оплачивая их заработанными очками, и тем самым как бы накручиваешь лайки на нужный тебе пост или типо того.

Там авторизуешься у них на сайте, потом выбираешь из списка задание(справа), вторым окном открывается ФБ, лайкаешь, проверяешь выполнил ли ты задание, получаешь очки. Вот собственно по такому алгоритму и пробую делать.
https://i.ibb.co/6BP219m/error.jpg

Или может вы какой-то другой план посоветуете?)

GD

13

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Наверняка там можно через запросы получать новые задания, и потом авторизируясь на фейсбуке выполнять их, но я бы не тратил на это время.

14

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Не тратить время на затею в целом или на ваш совет ?

через запросы получать новые задания, и потом авторизируясь на фейсбуке выполнять их

GD

15

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

На идею в целом и на мое предложение в частности.
Так как потратите много времени и сил на анализ траффика, а в итоге прибыли никакой.

16

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Я на эту мысль наткнулся случайно, стало интересно + недавно тут обсуждали способы управления хромом. Сложил 2+2 и подумал попробовать, научиться чему-то новому. А прибыль с накрутки не интересует совсем, в гугле можно найти где купить 1000 лайков за ~3у.е.

GD

17

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Ну если научиться чему-то новому, то попробуйте поставить лайк на фейсбуке через winhttprequest.
Авторизироваться можно так:
http://forum.script-coding.com/viewtopic.php?id=15875
Можно и через мобильную версию пробовать - по идее быстрее должно быть, но возможны ограничения - я глубоко не копал.

18

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Попробую конечно, но пока не представляю план.

GD

19

Re: AHK: проверить загружена ли страница на 100%, chrome.ahk

Анализировать траффик и повторять те же запросы.