1 (изменено: Michael, 2023-04-28 20:27:06)

Тема: AHK: Получить список с сайта в таблице, с авторизацией

Доброго времени суток всем!

Есть сайт (warface), там есть страничка личного кабинет, в которой есть список клана, количество набранных очков людьми итд.

Данную страницу просматривать может только мой аккаунт (ибо я офицер клана).

Видел много относительно похожих тем на форуме, но думаю у меня ситуация немного иная...

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

Вот ссылка https://ru.warface.com/officers/

Вот так нужные данные выглядят в инспекторе: https://ibb.co/qCpV5gp

И вот исходный код страницы (если он нужен для понимания):

<!doctype html>
<html xml:lang="ru">
<head><script>var n_js_once_lock=true;</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Информация о клане | WARFACE</title>
	<meta name="description" content="Информация о клане">
	<meta name="keywords" content="Warface, WF, CRYENGINE, MY.GAMES">
	<meta name="mrc__share_title" content="Информация о клане">
	<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">

	<meta property="og:image" content="https://ru.warface.com/static/wf.mail.ru/img/main/page/soc/img_wide.jpg">
	<meta property="og:title" content="Информация о клане | WARFACE">
	<meta property="og:description" content="Информация о клане">
	<meta property="og:type" content="website">
	<meta property="og:url" content="https://ru.warface.com/officers/">
	
	<link rel="image_src" href="https://ru.warface.com/static/wf.mail.ru/img/main/page/soc/img_wide.jpg">
	<link rel="apple-touch-icon" href="https://ru.warface.com/static/wf.mail.ru/img/main/page/soc/apple_touch_60.png">
	<link rel="apple-touch-icon" sizes="76x76" href="https://ru.warface.com/static/wf.mail.ru/img/main/page/soc/apple_touch_76.png">
	<link rel="apple-touch-icon" sizes="120x120" href="https://ru.warface.com/static/wf.mail.ru/img/main/page/soc/apple_touch_120.png">
	<link rel="apple-touch-icon" sizes="152x152" href="https://ru.warface.com/static/wf.mail.ru/img/main/page/soc/apple_touch_152.png">

	<link rel="stylesheet" href="https://wf.cdn.gmru.net/static/wf.mail.ru/css/main/main.css?82">
	<link rel="stylesheet" href="https://wf.cdn.gmru.net/static/wf.mail.ru/css/main/themes/anniversary/11.css">

	<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/modules/node/node.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/modules/poll/poll.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/modules/system/defaults.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/modules/system/system.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/modules/system/system-menus.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/modules/user/user.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/cck/theme/content-module.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/ckeditor/ckeditor.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/date/date.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/filefield/filefield.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/lightbox2/css/lightbox.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/views/css/views.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/mr_filefield/mr_filefield.css?6" />
<link type="text/css" rel="stylesheet" media="all" href="https://ru.cdn.gmru.net/sites/all/modules/mr_lightbox2/css/lightbox.css?6" />
<link rel="stylesheet" href="/static/wf.mail.ru/css/main/content/officers.css?99" />
	<script type="text/javascript" src="https://ru.cdn.gmru.net/sites/all/modules/jquery_update/replace/jquery.1.11.min.js?6"></script>
<script type="text/javascript" src="https://ru.cdn.gmru.net/misc/drupal.js?6"></script>
<script type="text/javascript" src="https://ru.cdn.gmru.net/sites/all/modules/lightbox2/js/lightbox.js?6"></script>
<script type="text/javascript" src="https://ru.cdn.gmru.net/sites/all/modules/mr_lightbox2/js/lightbox.js?6"></script>
<script type="text/javascript">
<!--//--><![CDATA[//><!--
jQuery.extend(Drupal.settings, { "basePath": "/", "lightbox2": { "rtl": "0", "file_path": "/(\\w\\w/)sites/ru.warface.com/files", "default_image": "https://ru.cdn.gmru.net/sites/all/modules/lightbox2/images/brokenimage.jpg", "border_size": "10", "font_color": "ddd", "box_color": "000", "top_position": "", "overlay_opacity": "0.8", "overlay_color": "000", "disable_close_click": 1, "resize_sequence": "0", "resize_speed": 400, "fade_in_speed": 400, "slide_down_speed": 600, "use_alt_layout": 0, "disable_resize": 1, "disable_zoom": 0, "force_show_nav": 0, "loop_items": 0, "node_link_text": "", "node_link_target": 0, "image_count": "Изображение !current из !total", "video_count": "Видео !current из !total", "page_count": "Страница !current из !total", "lite_press_x_close": "press \x3ca href=\"#\" onclick=\"hideLightbox(); return FALSE;\"\x3e\x3ckbd\x3ex\x3c/kbd\x3e\x3c/a\x3e to close", "download_link_text": "", "enable_login": false, "enable_contact": false, "keys_close": "c x 27", "keys_previous": "p 37", "keys_next": "n 39", "keys_zoom": "z", "keys_play_pause": "32", "display_image_size": "", "image_node_sizes": "()", "trigger_lightbox_classes": "", "trigger_lightbox_group_classes": "", "trigger_slideshow_classes": "", "trigger_lightframe_classes": "", "trigger_lightframe_group_classes": "", "custom_class_handler": 0, "custom_trigger_classes": "", "disable_for_gallery_lists": 1, "disable_for_acidfree_gallery_lists": true, "enable_acidfree_videos": true, "slideshow_interval": 5000, "slideshow_automatic_start": true, "slideshow_automatic_exit": true, "show_play_pause": true, "pause_on_next_click": false, "pause_on_previous_click": true, "loop_slides": false, "iframe_width": 600, "iframe_height": 400, "iframe_border": 1, "enable_video": 0 }, "mr_lightbox2": { "rtl": "0", "file_path": "/(\\w\\w/)sites/ru.warface.com/files", "default_image": "https://ru.cdn.gmru.net/sites/all/modules/mr_lightbox2/images/brokenimage.jpg", "border_size": "10", "font_color": "000", "box_color": "fff", "top_position": "", "overlay_opacity": "0.8", "overlay_color": "000", "disable_close_click": 1, "resize_sequence": "0", "resize_speed": 400, "fade_in_speed": 400, "slide_down_speed": 600, "use_alt_layout": 0, "disable_resize": 0, "disable_zoom": 0, "force_show_nav": 0, "loop_items": 0, "node_link_text": "Детали изображения", "node_link_target": 0, "image_count": "Изображение !current из !total", "video_count": "Видео !current из !total", "page_count": "Страница !current из !total", "lite_press_x_close": "press \x3ca href=\"#\" onclick=\"hideLightbox(); return FALSE;\"\x3e\x3ckbd\x3ex\x3c/kbd\x3e\x3c/a\x3e to close", "download_link_text": "", "enable_login": false, "enable_contact": false, "keys_close": "c x 27", "keys_previous": "p 37", "keys_next": "n 39", "keys_zoom": "z", "keys_play_pause": "32", "display_image_size": "", "image_node_sizes": "()", "trigger_lightbox_classes": "", "trigger_lightbox_group_classes": "", "trigger_slideshow_classes": "", "trigger_lightframe_classes": "", "trigger_lightframe_group_classes": "", "custom_class_handler": 0, "custom_trigger_classes": "", "disable_for_gallery_lists": true, "disable_for_acidfree_gallery_lists": true, "enable_acidfree_videos": true, "slideshow_interval": 5000, "slideshow_automatic_start": true, "slideshow_automatic_exit": true, "show_play_pause": true, "pause_on_next_click": false, "pause_on_previous_click": true, "loop_slides": false, "iframe_width": 600, "iframe_height": 400, "iframe_border": 1, "enable_video": 0 } });
//--><!]]>
</script>

	<link rel="shortcut icon" type="image/x-icon" href="/static/wf.mail.ru/img/main/favicon.ico">
	<link rel="canonical" href="https://ru.warface.com/officers/">

	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/jquery-migrate-1.2.1.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/mr_loader2.js?v=4"></script>
	<script>
		var oauth_cfg = {
			account : {signup_social : encodeURIComponent('mailru,vk,g,ok,eg,twitch,tw,steam')}
		};
	</script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/auth.js?35"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/mod_loader.js?6"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/main.js?41"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/terms_confirm.js?5"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/ovl.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/slick_slider.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/video_player.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/sly.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/vue.min.js"></script>
	<script src="https://wf.cdn.gmru.net/static/general/js/axios.min.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/countdown.js"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/gtm_events.js?2"></script>
	<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/modules/plugins/mailing_gift/plugin.js"></script>

</head>
<body  class="inner">

	<div id="soc_block" class="socials-global addthis_toolbox custom_images"
     addthis:data_ga_property='UA-3127420-21'
     addthis:url="https://ru.warface.com/officers/"
     addthis:title="Информация о клане | WARFACE"
     addthis:description="Информация о клане">
    <div class="addthis_counter"><span></span></div>
	<a class="addthis_button_twitter"><span title="Twitter"></span></a>
	<!-- <a class="addthis_button_mymailru"><span title="Поделиться в Моем Мире"></span></a> -->
	<!-- <a class="addthis_button_facebook"><span title="Поделиться в Facebook"></span></a> -->
	<a class="addthis_button_vk"><span title="Поделиться в VK"></span></a>
	<a class="addthis_button_odnoklassniki_ru"><span title="Поделиться в Одноклассниках"></span></a>
</div>
<script src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4ee9dbd612bf48e0&async=1"></script>
<script>
    try {
        addthis.init();
    }
    catch (e){
		
	}
</script>

	<div class="layout officers">

		<header>
			<div class="block_layout">

				
				<a href="/" class="logo"></a>

<div class="header_menu">
    <div class="section user_links">
        <a class="item icon type1" href="/inventory/">Мои предметы</a>
        <a class="item icon type2" href="/pin">Активировать ПИН-код</a>
        <a class="item icon type3" href="https://support.vkplay.ru/wf_ru/" target="_blank">Помощь</a>
    </div>
    <div class="section user_block loading"></div>
</div>

<div class="header_mob">
	<div class="header_mob_cont">
		<a class="btn ico_logo" href="/"></a>
		<div class="header_mob_block"></div>
	</div>

	<div class="header_mob_menu type_menu"></div>
	<div class="header_mob_menu type_profile"></div>
	<div class="header_mob_overlay"></div>
</div>

<a class="play_button js-play js-download"></a>

<div data="name_change" style="display: none;">
	<div data-ovl-target="ovl-change-nick" style="display:none">
		<div class="nickname">
			<h2 class="ovl-header">Сменить сайтовое имя</h2>
			<form class="redeem-code" method="POST" action="#" autocomplete="off">
				<input tabindex="63" class="wf__input nickname__input" id="new_nickname" maxlength="200" name="code" placeholder="Имя" type="text">
				<div data-bind="error" class="error-msg is-hidden nickname_error"></div>

				<div class="nickname__footer">
					<button tabindex="64" class="js-change-name wf__button ovl-bt">
						Сменить
					</button>
					<span class="wf__button ovl-bt ovl-bt_white js-ovl-close">Отмена</span>
				</div>
			</form>
		</div>
	</div>
	<div class="js-change-done" data-ovl-target="ovl-change-nick-done" style="display:none">
		<div style="padding: 10px 20px; min-width: 450px;">
			<h2 class="nickname__header">Готово</h2>
			<div class="nickname__body">
				<p class="msg" style="text-align: center;">Ваше имя успешно изменено</p><br>
				<span class="wf__button ovl-bt ovl-bt_white js-ovl-close" style="width: 220px; display: block; margin: 0px auto;">Ok</span><br>
			</div>
		</div>
	</div>
</div>

<div id="block-user-1" style="display: none;"></div>
<script>
	document.addEventListener('oauthUser', function(e){
		mr_load_block('/dynamic/auth/','block-user-1', {profile_reload: '0'});
	});
</script>
			</div>
		</header>

		<div class="main_menu_layout">
			<div class="main_menu">
				<div class="block_layout">
											<div id="block-menu-primary-links" class="block block-menu">

  
        <ul class="menu"><li class="leaf first even" id="menu69df1f85b0abbce850b5feb29bddcb2a"><a href="/news/" title="">Новости</a></li>
<li class="expanded even" id="menuacf664b247822ae00651a97d44f5f4c0"><a href="/game/" title="">Об игре</a><ul class="menu"><li class="leaf first odd" id="menu9d94354d046d0636c19aa8d5cdcf75a6"><a href="https://market.vkplay.ru/game/1/" title="">VK Play Маркет</a></li>
<li class="leaf even" id="menu5459b58a24e9fbb7166498474b5b54bf"><a href="/download/" title="">Скачать игру</a></li>
<li class="leaf odd" id="menu2c240f2a75c20dd8304f77fc55b4e21a"><a href="/guide/" title="">Новому игроку</a></li>
<li class="leaf even" id="menuc24797c4abfb4ebe54dc45b9e411ac3a"><a href="/media/" title="">Медиа</a></li>
<li class="leaf last odd" id="menu1e6e5f901e5ae44738fb4497947061ac"><a href="https://support.vkplay.ru/wf_ru/" title="">Помощь</a></li>
</ul></li>
<li class="expanded odd" id="menu3f37694eebbafa5705a6b637fadc169c"><a href="https://pvp.vkplay.ru/" title="eSports">eSports</a><ul class="menu"><li class="leaf first odd" id="menuf800d14f598cd6d7981421853509b074"><a href="https://pvp.vkplay.ru/vk/pro12" title="">Промостраница</a></li>
<li class="leaf even" id="menuac6b0c58d91284f6823e1252ac7d3f9b"><a href="https://ru.warface.com/news/1011523.html" title="">Warface PRO.Spring 2023</a></li>
<li class="leaf odd" id="menu82946e1d58c959ef4b4d2e21e483c4e4"><a href="https://pvp.vkplay.ru/teamfinder" title="">Поиск напарников</a></li>
<li class="leaf last even" id="menu37307aba0ac427becb92c9ae57ae0e09"><a href="https://pvp.vkplay.ru/tournaments" title="">Все турниры</a></li>
</ul></li>
<li class="expanded active-trail even" id="menu3e5d53ad868231660799b4c559ea5211"><a href="/community/" title="Общение">Общение</a><ul class="menu"><li class="leaf first even" id="menuea2516f035d007d556e0cf355a9d6013"><a href="/community/" title="Страница социальных сетей">Социальные сети</a></li>
<li class="leaf last active-trail odd" id="menud8dafc5daf671ce98599a3084fa27355"><a href="/officers/" title="" class="active">Клан</a></li>
</ul></li>
<li class="leaf odd" id="menud54b7ba27571a2f00b38ed9273b974f2"><a href="https://ru.warface.com/wiki/" title="">Wiki</a></li>
<li class="leaf even" id="menu0f7ef45a6478ef6aa87af9eb9952f101"><a href="/billing/payment/" title="">Пополнить счет</a></li>
<li class="expanded last even" id="menu1794c6768d344befe141546664415862"><a href="/profile/" title="">Личный кабинет</a><ul class="menu"><li class="leaf first odd" id="menua46c372347e02010f5ef45fe441e4349"><a href="/profile/" title="">Профиль</a></li>
<li class="leaf even" id="menu671a08bf91e24b1bb1547a4a64dd422e"><a href="/pin/" title="">Активировать ПИН-код</a></li>
<li class="leaf odd" id="menu8c341296e48151c1c271caa1615af344"><a href="/rtk/" title="">Тариф &quot;Игровой&quot;</a></li>
<li class="leaf even" id="menu306e41fce3bc9de4911363df9a80a5ba"><a href="/collection/" title="">Коллекции</a></li>
<li class="leaf odd" id="menu43466f8907bb5eaec92630fc67ab2bee"><a href="/bonus/" title="">Программа бонусов</a></li>
<li class="leaf even" id="menu74846c1f5c480ef0e34aabcd1a88f02c"><a href="/inventory/" title="">Сервисы</a></li>
<li class="leaf odd" id="menu78bcef038e4457a487bb736942a924a8"><a href="/billing/sberbank/" title="">СБЕР &quot;Спасибо&quot;</a></li>
<li class="leaf even" id="menud2ed721d0c08f9f114598a084f24c784"><a href="/sms/manage/" title="">Уведомления</a></li>
<li class="leaf last odd" id="menu049e27cc090d0e8382f3618229d1fba1"><a href="/profile/settings/" title="">Настройки аккаунта</a></li>
</ul></li>
</ul>
</div>
<div id="block-menu-menu-mobile" class="block block-menu">

  
        <ul class="menu"><li class="leaf first odd" id="menu69df1f85b0abbce850b5feb29bddcb2a"><a href="/news/" title="">Новости</a></li>
<li class="expanded odd" id="menuacf664b247822ae00651a97d44f5f4c0"><a href="/game/" title="">Об игре</a><ul class="menu"><li class="leaf first even" id="menu40f2bdca5cca84d37dd32b798712397b"><a href="https://market.games.mail.ru/game/1" title="">Игромаркет</a></li>
<li class="leaf odd" id="menu2c240f2a75c20dd8304f77fc55b4e21a"><a href="/guide/" title="">Новому игроку</a></li>
<li class="leaf last even" id="menuc24797c4abfb4ebe54dc45b9e411ac3a"><a href="/media/" title="">Медиа</a></li>
</ul></li>
<li class="expanded active-trail even" id="menu3e5d53ad868231660799b4c559ea5211"><a href="/community/" title="">Общение</a><ul class="menu"><li class="leaf first even" id="menuea2516f035d007d556e0cf355a9d6013"><a href="/community/" title="">Социальные сети</a></li>
<li class="leaf last active-trail odd" id="menud8dafc5daf671ce98599a3084fa27355"><a href="/officers/" title="" class="active">Клан</a></li>
</ul></li>
<li class="leaf odd" id="menud54b7ba27571a2f00b38ed9273b974f2"><a href="https://ru.warface.com/wiki/" title="">Wiki</a></li>
<li class="leaf even" id="menu1e6e5f901e5ae44738fb4497947061ac"><a href="https://support.my.games/wf_ru/" title="">Помощь</a></li>
<li class="leaf last odd" id="menu0f7ef45a6478ef6aa87af9eb9952f101"><a href="/billing/payment/" title="">Пополнить счет</a></li>
</ul>
</div>
									</div>
			</div>
		</div>

		<div class="block_layout">

			
			<div class="cont_layout">

				<div class="container">
															
					
												
<div id="textcontent">

		
		<div class="hdr_layout">
	<h1>Информация о клане</h1>
</div>
<div id="node-999925" class="node">

	
	
	
		<script>
mod_loader.init('officers', {
    auth: 1,
    version: 2,
});
</script>

<!--<div id="mr_block_officers">
	<div class="mr_loader skyblue" id="mr_block_officers_load" style="height: 315px; display: none;">
		&nbsp;</div>
	<script>
	if(!!window.jQuery) {
		$(document).on('canLoad', function(){
	mr_load_block('/dynamic/officers/','mr_block_officers');
	});
	} else {
		console.log('[officers module] jquery not loaded.');
	}
	</script></div>
-->
	<div class="meta clearfix">

		
		
	</div>

</div>
			
	
</div>
									</div>

				<aside>
					<div id="block-menu-menu-profile-menu" class="block block-menu">

  
        <ul class="menu"><li class="leaf first even" id="menua46c372347e02010f5ef45fe441e4349"><a href="/profile/" title="">Профиль</a></li>
<li class="leaf odd" id="menuc6d4dbf6c9424ff156a44e4e531a9f6c"><a href="/pin/activate/" title="">Активировать пин-код</a></li>
<li class="leaf even" id="menu8c341296e48151c1c271caa1615af344"><a href="/rtk/" title="">Тариф &quot;Игровой&quot;</a></li>
<li class="leaf odd" id="menu306e41fce3bc9de4911363df9a80a5ba"><a href="/collection/" title="">Коллекции</a></li>
<li class="leaf even" id="menu43466f8907bb5eaec92630fc67ab2bee"><a href="/bonus/" title="">Программа бонусов</a></li>
<li class="leaf odd" id="menu74846c1f5c480ef0e34aabcd1a88f02c"><a href="/inventory/" title="">Сервисы</a></li>
<li class="leaf even" id="menub7dc5d88d69eb46790de7c66bd581fd6"><a href="/billing/overdraft/" title="">Беспроцентный кредит</a></li>
<li class="leaf odd" id="menu65a69e1c286246c175e88b21e899c3ea"><a href="/billing/sberbank/" title="">Наборы Сбер &quot;Спасибо&quot;</a></li>
<li class="leaf even" id="menud2ed721d0c08f9f114598a084f24c784"><a href="/sms/manage/" title="">Уведомления</a></li>
<li class="leaf last odd" id="menu049e27cc090d0e8382f3618229d1fba1"><a href="/profile/settings/" title="">Настройки аккаунта</a></li>
</ul>
</div>
				</aside>

			</div>

			
		</div>

		<footer>
			<div class="block_layout">
				<div id="block-menu-menu-menu-footer" class="block block-menu">

  
        <ul class="menu"><li class="leaf first even" id="menu69df1f85b0abbce850b5feb29bddcb2a"><a href="/news/" title="">Новости</a></li>
<li class="expanded odd" id="menuacf664b247822ae00651a97d44f5f4c0"><a href="/game/" title="">Об игре</a><ul class="menu"><li class="leaf first odd" id="menu5459b58a24e9fbb7166498474b5b54bf"><a href="/download/" title="">Скачать игру</a></li>
<li class="leaf even" id="menu2c240f2a75c20dd8304f77fc55b4e21a"><a href="/guide/" title="">Новому игроку</a></li>
<li class="leaf odd" id="menu40f2bdca5cca84d37dd32b798712397b"><a href="https://market.games.mail.ru/game/1" title="">Игромаркет</a></li>
<li class="leaf last even" id="menu327254eeb2c162b02e18c2226c2b6bd9"><a href="https://ru.warface.com/guide/1010783.html" title="">Системные требования</a></li>
</ul></li>
<li class="expanded odd" id="menu3f37694eebbafa5705a6b637fadc169c"><a href="https://pvp.vkplay.ru/" title="">ESports</a><ul class="menu"><li class="leaf first even" id="menuac6b0c58d91284f6823e1252ac7d3f9b"><a href="https://ru.warface.com/news/1011523.html" title="">Warface PRO.Spring 2023</a></li>
<li class="leaf odd" id="menu82946e1d58c959ef4b4d2e21e483c4e4"><a href="https://pvp.vkplay.ru/teamfinder" title="">Поиск напарников</a></li>
<li class="leaf last even" id="menu37307aba0ac427becb92c9ae57ae0e09"><a href="https://pvp.vkplay.ru/tournaments" title="">Все турниры</a></li>
</ul></li>
<li class="expanded odd" id="menu3e5d53ad868231660799b4c559ea5211"><a href="/community/" title="">Общение</a><ul class="menu"><li class="leaf first last even" id="menuea2516f035d007d556e0cf355a9d6013"><a href="/community/" title="">Социальные сети</a></li>
</ul></li>
<li class="expanded last even" id="menud54b7ba27571a2f00b38ed9273b974f2"><a href="https://ru.warface.com/wiki/" title="">Wiki</a><ul class="menu"><li class="leaf first even" id="menu1e6e5f901e5ae44738fb4497947061ac"><a href="https://support.vkplay.ru/wf_ru/" title="">Помощь</a></li>
<li class="leaf last odd" id="menu6d8365a5856fcd224e28b1a84f008071"><a href="/documents/" title="">Документы</a></li>
</ul></li>
</ul>
</div>
<div id="block-block-68" class="block block-block">

  
        <div class="logos">
      <a class="logos_item" href="http://www.cryengine.com" target="_blank">
        <img alt="Cry Engine" src="https://wf.cdn.gmru.net/static/wf.mail.ru/img/main/page/footer/site/cryengine.png">
      </a>
      <a class="logos_item" href="https://vkplay.ru/" target="_blank">
        <img alt="VK Play" src="https://wf.cdn.gmru.net/static/wf.mail.ru/img/main/page/footer/site/vkplay.png">
      </a>
      <a class="logos_item" href="https://astrum-entertainment.ru/" target="_blank">
        <img alt="Astrum Ent." src="https://wf.cdn.gmru.net/static/wf.mail.ru/img/main/page/footer/site/astrum.png">
      </a>
</div>

<div class="counters">

<script src="https://wf.cdn.gmru.net/static/wf.mail.ru/js/main/track_blocks.js"></script>
<img src="https://rs.mail.ru/d715525.gif" style="position:absolute;" width="1" height="1" alt="" border="0">

<!--LiveInternet counter--><script><!--
document.write("<a href='http://www.liveinternet.ru/click' "+
"target=_blank><img src='//counter.yadro.ru/hit?t25.5;r"+
escape(document.referrer)+((typeof(screen)=="undefined")?"":
";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?
screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+
";"+Math.random()+
"' alt='' title='LiveInternet: показано число посетителей за"+
" сегодня' "+
"border='0' width='88' height='15'><\/a>")
//--></script><!--/LiveInternet-->

<!-- tns-counter.ru -->
<script language="JavaScript"> 
	var img = new Image();
	img.src = '//www.tns-counter.ru/V13a***R>' + document.referrer.replace(/\*/g,'%2a') + '*mail_ru/ru/UTF-8/tmsec=mail_games-wf-other/' + Math.round(Math.random() * 1000000000);
</script>
<noscript> 
	<img src="//www.tns-counter.ru/V13a****mail_ru/ru/UTF-8/tmsec=mail_games-wf-other/" width="1" height="1" alt="">
</noscript>
<!--/ tns-counter.ru -->

<script src="https://wf.mail.ru/n.js"></script>

</div>
</div>
<div id="block-block-69" class="block block-block">

  
        <div class="footer_text">
	<p>© <script>document.write(new Date().getFullYear())</script> <a href="https://astrum-entertainment.ru/" target="_blank" style="color: currentColor;">ООО "АСТРУМ"</a>.</p>
	<p>Portions of this software are included under license © 2004-2020 Crytek GmbH.</p>
	<p>All rights reserved. All trademarks are the property of their respective owners.</p>
</div>

<div class="footer_ico">
	<img src="https://wf.cdn.gmru.net/static/wf.mail.ru/img/main/page/footer/ico12.png" alt="12+">
</div>
</div>
			</div>
		</footer>

	</div>

	
	<script>
		document.addEventListener('oauthUser', function(e){
			$.event.trigger({type: "canLoad"});
		});
	</script>

	<script>
		axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
	</script>

 </body>
</html>

Буду благодарен за помощь / подсказки!

2 (изменено: Michael, 2023-04-29 02:54:05)

Re: AHK: Получить список с сайта в таблице, с авторизацией

Удалось понять как получать все нужные мне данные в консоли браузера:

;Выводит никнейм первого игрока из таблицы в консоли браузера
document.getElementsByClassName("oc_1")[0].innerText

;Выводит очки первого игрока из таблицы в консоли браузера
document.getElementsByClassName("oc_3")[0].innerText 

;Выводит дату вступления первого игрока из таблицы в консоли браузера
document.getElementsByClassName("oc_5")[0].innerText 

Всего там 50 игроков, и чтобы узнать всех по порядку нужно менять [0] на ту цифру которую нужно. То есть с 0 до 49. Тут я разобрался.

Осталось додумать как все эти данные по порядку записывать в таблицу (желательно в ГУИ ахк прям) и как быть с авторизацией

3

Re: AHK: Получить список с сайта в таблице, с авторизацией

Сделал вот такую таблицу - заготовку, под каждое значение:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Gui, Add, Edit, x12 y20 w120 h20 v01, НИК
Gui, Add, Edit, x130 y20 w120 h20 v02, ОЧКИ
Gui, Add, Edit, x248 y20 w120 h20 v03, ДАТА
Gui, Add, Edit, x12 y40 w120 h20 v11, НИК
Gui, Add, Edit, x130 y40 w120 h20 v12, ОЧКИ
Gui, Add, Edit, x248 y40 w120 h20 v13, ДАТА
Gui, Add, Edit, x12 y60 w120 h20 v21, НИК
Gui, Add, Edit, x130 y60 w120 h20 v22, ОЧКИ
Gui, Add, Edit, x248 y60 w120 h20 v23, ДАТА
Gui, Add, Edit, x12 y80 w120 h20 v31, НИК
Gui, Add, Edit, x130 y80 w120 h20 v32, ОЧКИ
Gui, Add, Edit, x248 y80 w120 h20 v33, ДАТА
Gui, Add, Edit, x12 y100 w120 h20 v41, НИК
Gui, Add, Edit, x130 y100 w120 h20 v42, ОЧКИ
Gui, Add, Edit, x248 y100 w120 h20 v43, ДАТА
Gui, Add, Edit, x12 y120 w120 h20 v51, НИК
Gui, Add, Edit, x130 y120 w120 h20 v52, ОЧКИ
Gui, Add, Edit, x248 y120 w120 h20 v53, ДАТА
Gui, Add, Edit, x12 y140 w120 h20 v61, НИК
Gui, Add, Edit, x130 y140 w120 h20 v62, ОЧКИ
Gui, Add, Edit, x248 y140 w120 h20 v63, ДАТА
Gui, Add, Edit, x12 y160 w120 h20 v71, НИК
Gui, Add, Edit, x130 y160 w120 h20 v72, ОЧКИ
Gui, Add, Edit, x248 y160 w120 h20 v73, ДАТА
Gui, Add, Edit, x12 y180 w120 h20 v81, НИК
Gui, Add, Edit, x130 y180 w120 h20 v82, ОЧКИ
Gui, Add, Edit, x248 y180 w120 h20 v83, ДАТА
Gui, Add, Edit, x12 y200 w120 h20 v91, НИК
Gui, Add, Edit, x130 y200 w120 h20 v92, ОЧКИ
Gui, Add, Edit, x248 y200 w120 h20 v93, ДАТА
Gui, Add, Edit, x12 y220 w120 h20 v101, НИК
Gui, Add, Edit, x130 y220 w120 h20 v102, ОЧКИ
Gui, Add, Edit, x248 y220 w120 h20 v103, ДАТА
Gui, Add, Edit, x12 y240 w120 h20 v111, НИК
Gui, Add, Edit, x130 y240 w120 h20 v112, ОЧКИ
Gui, Add, Edit, x248 y240 w120 h20 v113, ДАТА
Gui, Add, Edit, x12 y260 w120 h20 v121, НИК
Gui, Add, Edit, x130 y260 w120 h20 v122, ОЧКИ
Gui, Add, Edit, x248 y260 w120 h20 v123, ДАТА
Gui, Add, Edit, x12 y280 w120 h20 v131, НИК
Gui, Add, Edit, x130 y280 w120 h20 v132, ОЧКИ
Gui, Add, Edit, x248 y280 w120 h20 v133, ДАТА
Gui, Add, Edit, x12 y300 w120 h20 v141, НИК
Gui, Add, Edit, x130 y300 w120 h20 v142, ОЧКИ
Gui, Add, Edit, x248 y300 w120 h20 v143, ДАТА
Gui, Add, Edit, x12 y320 w120 h20 v151, НИК
Gui, Add, Edit, x130 y320 w120 h20 v152, ОЧКИ
Gui, Add, Edit, x248 y320 w120 h20 v153, ДАТА
Gui, Add, Edit, x12 y340 w120 h20 v161, НИК
Gui, Add, Edit, x130 y340 w120 h20 v162, ОЧКИ
Gui, Add, Edit, x248 y340 w120 h20 v163, ДАТА
Gui, Add, Edit, x12 y360 w120 h20 v171, НИК
Gui, Add, Edit, x130 y360 w120 h20 v172, ОЧКИ
Gui, Add, Edit, x248 y360 w120 h20 v173, ДАТА
Gui, Add, Edit, x12 y380 w120 h20 v181, НИК
Gui, Add, Edit, x130 y380 w120 h20 v182, ОЧКИ
Gui, Add, Edit, x248 y380 w120 h20 v183, ДАТА
Gui, Add, Edit, x12 y400 w120 h20 v191, НИК
Gui, Add, Edit, x130 y400 w120 h20 v192, ОЧКИ
Gui, Add, Edit, x248 y400 w120 h20 v193, ДАТА
Gui, Add, Edit, x12 y420 w120 h20 v201, НИК
Gui, Add, Edit, x130 y420 w120 h20 v202, ОЧКИ
Gui, Add, Edit, x248 y420 w120 h20 v203, ДАТА
Gui, Add, Edit, x12 y440 w120 h20 v211, НИК
Gui, Add, Edit, x130 y440 w120 h20 v212, ОЧКИ
Gui, Add, Edit, x248 y440 w120 h20 v213, ДАТА
Gui, Add, Edit, x12 y460 w120 h20 v221, НИК
Gui, Add, Edit, x130 y460 w120 h20 v222, ОЧКИ
Gui, Add, Edit, x248 y460 w120 h20 v223, ДАТА
Gui, Add, Edit, x12 y480 w120 h20 v231, НИК
Gui, Add, Edit, x130 y480 w120 h20 v232, ОЧКИ
Gui, Add, Edit, x248 y480 w120 h20 v233, ДАТА
Gui, Add, Edit, x12 y500 w120 h20 v241, НИК
Gui, Add, Edit, x130 y500 w120 h20 v242, ОЧКИ
Gui, Add, Edit, x248 y500 w120 h20 v243, ДАТА

Gui, Add, Edit, x400 y20 w120 h20 v251, НИК
Gui, Add, Edit, x518 y20 w120 h20 v252, ОЧКИ
Gui, Add, Edit, x636 y20 w120 h20 v253, ДАТА
Gui, Add, Edit, x400 y40 w120 h20 v261, НИК
Gui, Add, Edit, x518 y40 w120 h20 v262, ОЧКИ
Gui, Add, Edit, x636 y40 w120 h20 v263, ДАТА
Gui, Add, Edit, x400 y60 w120 h20 v271, НИК
Gui, Add, Edit, x518 y60 w120 h20 v272, ОЧКИ
Gui, Add, Edit, x636 y60 w120 h20 v273, ДАТА
Gui, Add, Edit, x400 y80 w120 h20 v281, НИК
Gui, Add, Edit, x518 y80 w120 h20 v282, ОЧКИ
Gui, Add, Edit, x636 y80 w120 h20 v283, ДАТА
Gui, Add, Edit, x400 y100 w120 h20 v291, НИК
Gui, Add, Edit, x518 y100 w120 h20 v292, ОЧКИ
Gui, Add, Edit, x636 y100 w120 h20 v293, ДАТА
Gui, Add, Edit, x400 y120 w120 h20 v301, НИК
Gui, Add, Edit, x518 y120 w120 h20 v302, ОЧКИ
Gui, Add, Edit, x636 y120 w120 h20 v303, ДАТА
Gui, Add, Edit, x400 y140 w120 h20 v311, НИК
Gui, Add, Edit, x518 y140 w120 h20 v312, ОЧКИ
Gui, Add, Edit, x636 y140 w120 h20 v313, ДАТА
Gui, Add, Edit, x400 y160 w120 h20 v321, НИК
Gui, Add, Edit, x518 y160 w120 h20 v322, ОЧКИ
Gui, Add, Edit, x636 y160 w120 h20 v323, ДАТА
Gui, Add, Edit, x400 y180 w120 h20 v331, НИК
Gui, Add, Edit, x518 y180 w120 h20 v332, ОЧКИ
Gui, Add, Edit, x636 y180 w120 h20 v333, ДАТА
Gui, Add, Edit, x400 y200 w120 h20 v341, НИК
Gui, Add, Edit, x518 y200 w120 h20 v342, ОЧКИ
Gui, Add, Edit, x636 y200 w120 h20 v343, ДАТА
Gui, Add, Edit, x400 y220 w120 h20 v351, НИК
Gui, Add, Edit, x518 y220 w120 h20 v352, ОЧКИ
Gui, Add, Edit, x636 y220 w120 h20 v353, ДАТА
Gui, Add, Edit, x400 y240 w120 h20 v361, НИК
Gui, Add, Edit, x518 y240 w120 h20 v362, ОЧКИ
Gui, Add, Edit, x636 y240 w120 h20 v363, ДАТА
Gui, Add, Edit, x400 y260 w120 h20 v371, НИК
Gui, Add, Edit, x518 y260 w120 h20 v372, ОЧКИ
Gui, Add, Edit, x636 y260 w120 h20 v373, ДАТА
Gui, Add, Edit, x400 y280 w120 h20 v381, НИК
Gui, Add, Edit, x518 y280 w120 h20 v382, ОЧКИ
Gui, Add, Edit, x636 y280 w120 h20 v383, ДАТА
Gui, Add, Edit, x400 y300 w120 h20 v391, НИК
Gui, Add, Edit, x518 y300 w120 h20 v392, ОЧКИ
Gui, Add, Edit, x636 y300 w120 h20 v393, ДАТА
Gui, Add, Edit, x400 y320 w120 h20 v401, НИК
Gui, Add, Edit, x518 y320 w120 h20 v402, ОЧКИ
Gui, Add, Edit, x636 y320 w120 h20 v403, ДАТА
Gui, Add, Edit, x400 y340 w120 h20 v411, НИК
Gui, Add, Edit, x518 y340 w120 h20 v412, ОЧКИ
Gui, Add, Edit, x636 y340 w120 h20 v413, ДАТА
Gui, Add, Edit, x400 y360 w120 h20 v421, НИК
Gui, Add, Edit, x518 y360 w120 h20 v422, ОЧКИ
Gui, Add, Edit, x636 y360 w120 h20 v423, ДАТА
Gui, Add, Edit, x400 y380 w120 h20 v431, НИК
Gui, Add, Edit, x518 y380 w120 h20 v432, ОЧКИ
Gui, Add, Edit, x636 y380 w120 h20 v433, ДАТА
Gui, Add, Edit, x400 y400 w120 h20 v441, НИК
Gui, Add, Edit, x518 y400 w120 h20 v442, ОЧКИ
Gui, Add, Edit, x636 y400 w120 h20 v443, ДАТА
Gui, Add, Edit, x400 y420 w120 h20 v451, НИК
Gui, Add, Edit, x518 y420 w120 h20 v452, ОЧКИ
Gui, Add, Edit, x636 y420 w120 h20 v453, ДАТА
Gui, Add, Edit, x400 y440 w120 h20 v461, НИК
Gui, Add, Edit, x518 y440 w120 h20 v462, ОЧКИ
Gui, Add, Edit, x636 y440 w120 h20 v463, ДАТА
Gui, Add, Edit, x400 y460 w120 h20 v471, НИК
Gui, Add, Edit, x518 y460 w120 h20 v472, ОЧКИ
Gui, Add, Edit, x636 y460 w120 h20 v473, ДАТА
Gui, Add, Edit, x400 y480 w120 h20 v481, НИК
Gui, Add, Edit, x518 y480 w120 h20 v482, ОЧКИ
Gui, Add, Edit, x636 y480 w120 h20 v483, ДАТА
Gui, Add, Edit, x400 y500 w120 h20 v491, НИК
Gui, Add, Edit, x518 y500 w120 h20 v492, ОЧКИ
Gui, Add, Edit, x636 y500 w120 h20 v493, ДАТА
Gui, Show, x127 y87 h600 w770,
return

Прошу помощи, подскажите как получить значение и вывести его в одну из ячеек таблицы (учитывая, что на этой странице должна быть авторизация) из:

document.getElementsByClassName("oc_1")[0].innerText

Авторизован я в браузере Мозилы, могу еще использовать Хром браузер.

4

Re: AHK: Получить список с сайта в таблице, с авторизацией

Если javascript правильно работает из консоли Хрома, то вот так можно запустить его из адресной строки и получить то, что он возвращает:

js := "здесь ваш javascript"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

MsgBox % GetInfoFromWebPage(js, hWnd)

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw "Failed to get text"
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}

Будет работать только в Хроме и в Edge.

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

5

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker

Авторизовался в хроме, попробовал в консоли хрома -  javascript работает и выдает нужное значение.

Но, в ваш код если вставлять JS мой, то выдает undefined.

Как быть? Если что, выдаваемые значение 90% кириллица, может в этом проблема?

6

Re: AHK: Получить список с сайта в таблице, с авторизацией

Не могу сказать, в чём проблема, так как не вижу ни вашей страницы, ни того, что вы написали. Код проверен, работает. Вот так можно получить заголовок этой страницы:

js := "document.title"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

MsgBox % GetInfoFromWebPage(js, hWnd)

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw "Failed to get text"
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: Michael, 2023-05-03 14:43:16)

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker

Странно, но вышеописанный код дает ошибку "Failed to get text". Браузер Хром.

UPD:
От имени администратора выдал название страницы.

По поводу моего JS, для теста использую document.getElementsByClassName("oc_1")[0].innerText
Пробовал тоже от имени администратора, также выдает undefined.

Вот полный скрипт, который выдает ошибку:

js := document.getElementsByClassName("oc_1")[0].innerText
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

MsgBox % GetInfoFromWebPage(js, hWnd)

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw "Failed to get text"
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}

8

Re: AHK: Получить список с сайта в таблице, с авторизацией

Посмотрите внимательно, как мой JavaScript оформлен. Это строка, она должна быть в кавычках.

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

9

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker

Есть взять в кавычки скрипт не запускается вообще, выдает ошибку "The following variable name contains an illegal character: "oc_1""

Вот такой скрипт полный:

js := "document.getElementsByClassName("oc_1")[0].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

MsgBox % GetInfoFromWebPage(js, hWnd)

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw "Failed to get text"
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}

Я так понимаю проблема в том, что кавычки в кавычках, но не понимаю как решить вопрос.

10

Re: AHK: Получить список с сайта в таблице, с авторизацией

Там есть вложенные кавычки, поэтому выдаёт ошибку. В js можно использовать одинарные кавычки вместо двойных.

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

11 (изменено: Michael, 2023-05-03 17:47:45)

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker

Получилось! Работает только от имени администратора, поэтому добавил в начало соответствующий код, вот так получается:


if IsAdmin = 0
{

		CommandLine := DllCall("GetCommandLine", "Str")
		If !(A_IsAdmin || RegExMatch(CommandLine, " /restart(?!\S)")) 
		{
   				Try 
   				{
        				If (A_IsCompiled) 
        				{
           						Run *RunAs "%A_ScriptFullPath%" /restart
        				} 
				        Else 
				        {
				            	Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
				        }
    			}
   				ExitApp
		}

}

js := "document.getElementsByClassName('oc_1')[0].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

MsgBox % GetInfoFromWebPage(js, hWnd)

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw "Failed to get text"
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}

Осталось понять, как получаемое сообщение вместо MsgBox выводить в нужную ячейку таблицы (поле Edit).

Вот сама таблица:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Gui, Add, Edit, x12 y20 w120 h20 v01, НИК
Gui, Add, Edit, x130 y20 w120 h20 v02, ОЧКИ
Gui, Add, Edit, x248 y20 w120 h20 v03, ДАТА
Gui, Add, Edit, x12 y40 w120 h20 v11, НИК
Gui, Add, Edit, x130 y40 w120 h20 v12, ОЧКИ
Gui, Add, Edit, x248 y40 w120 h20 v13, ДАТА
Gui, Add, Edit, x12 y60 w120 h20 v21, НИК
Gui, Add, Edit, x130 y60 w120 h20 v22, ОЧКИ
Gui, Add, Edit, x248 y60 w120 h20 v23, ДАТА
Gui, Add, Edit, x12 y80 w120 h20 v31, НИК
Gui, Add, Edit, x130 y80 w120 h20 v32, ОЧКИ
Gui, Add, Edit, x248 y80 w120 h20 v33, ДАТА
Gui, Add, Edit, x12 y100 w120 h20 v41, НИК
Gui, Add, Edit, x130 y100 w120 h20 v42, ОЧКИ
Gui, Add, Edit, x248 y100 w120 h20 v43, ДАТА
Gui, Add, Edit, x12 y120 w120 h20 v51, НИК
Gui, Add, Edit, x130 y120 w120 h20 v52, ОЧКИ
Gui, Add, Edit, x248 y120 w120 h20 v53, ДАТА
Gui, Add, Edit, x12 y140 w120 h20 v61, НИК
Gui, Add, Edit, x130 y140 w120 h20 v62, ОЧКИ
Gui, Add, Edit, x248 y140 w120 h20 v63, ДАТА
Gui, Add, Edit, x12 y160 w120 h20 v71, НИК
Gui, Add, Edit, x130 y160 w120 h20 v72, ОЧКИ
Gui, Add, Edit, x248 y160 w120 h20 v73, ДАТА
Gui, Add, Edit, x12 y180 w120 h20 v81, НИК
Gui, Add, Edit, x130 y180 w120 h20 v82, ОЧКИ
Gui, Add, Edit, x248 y180 w120 h20 v83, ДАТА
Gui, Add, Edit, x12 y200 w120 h20 v91, НИК
Gui, Add, Edit, x130 y200 w120 h20 v92, ОЧКИ
Gui, Add, Edit, x248 y200 w120 h20 v93, ДАТА
Gui, Add, Edit, x12 y220 w120 h20 v101, НИК
Gui, Add, Edit, x130 y220 w120 h20 v102, ОЧКИ
Gui, Add, Edit, x248 y220 w120 h20 v103, ДАТА
Gui, Add, Edit, x12 y240 w120 h20 v111, НИК
Gui, Add, Edit, x130 y240 w120 h20 v112, ОЧКИ
Gui, Add, Edit, x248 y240 w120 h20 v113, ДАТА
Gui, Add, Edit, x12 y260 w120 h20 v121, НИК
Gui, Add, Edit, x130 y260 w120 h20 v122, ОЧКИ
Gui, Add, Edit, x248 y260 w120 h20 v123, ДАТА
Gui, Add, Edit, x12 y280 w120 h20 v131, НИК
Gui, Add, Edit, x130 y280 w120 h20 v132, ОЧКИ
Gui, Add, Edit, x248 y280 w120 h20 v133, ДАТА
Gui, Add, Edit, x12 y300 w120 h20 v141, НИК
Gui, Add, Edit, x130 y300 w120 h20 v142, ОЧКИ
Gui, Add, Edit, x248 y300 w120 h20 v143, ДАТА
Gui, Add, Edit, x12 y320 w120 h20 v151, НИК
Gui, Add, Edit, x130 y320 w120 h20 v152, ОЧКИ
Gui, Add, Edit, x248 y320 w120 h20 v153, ДАТА
Gui, Add, Edit, x12 y340 w120 h20 v161, НИК
Gui, Add, Edit, x130 y340 w120 h20 v162, ОЧКИ
Gui, Add, Edit, x248 y340 w120 h20 v163, ДАТА
Gui, Add, Edit, x12 y360 w120 h20 v171, НИК
Gui, Add, Edit, x130 y360 w120 h20 v172, ОЧКИ
Gui, Add, Edit, x248 y360 w120 h20 v173, ДАТА
Gui, Add, Edit, x12 y380 w120 h20 v181, НИК
Gui, Add, Edit, x130 y380 w120 h20 v182, ОЧКИ
Gui, Add, Edit, x248 y380 w120 h20 v183, ДАТА
Gui, Add, Edit, x12 y400 w120 h20 v191, НИК
Gui, Add, Edit, x130 y400 w120 h20 v192, ОЧКИ
Gui, Add, Edit, x248 y400 w120 h20 v193, ДАТА
Gui, Add, Edit, x12 y420 w120 h20 v201, НИК
Gui, Add, Edit, x130 y420 w120 h20 v202, ОЧКИ
Gui, Add, Edit, x248 y420 w120 h20 v203, ДАТА
Gui, Add, Edit, x12 y440 w120 h20 v211, НИК
Gui, Add, Edit, x130 y440 w120 h20 v212, ОЧКИ
Gui, Add, Edit, x248 y440 w120 h20 v213, ДАТА
Gui, Add, Edit, x12 y460 w120 h20 v221, НИК
Gui, Add, Edit, x130 y460 w120 h20 v222, ОЧКИ
Gui, Add, Edit, x248 y460 w120 h20 v223, ДАТА
Gui, Add, Edit, x12 y480 w120 h20 v231, НИК
Gui, Add, Edit, x130 y480 w120 h20 v232, ОЧКИ
Gui, Add, Edit, x248 y480 w120 h20 v233, ДАТА
Gui, Add, Edit, x12 y500 w120 h20 v241, НИК
Gui, Add, Edit, x130 y500 w120 h20 v242, ОЧКИ
Gui, Add, Edit, x248 y500 w120 h20 v243, ДАТА

Gui, Add, Edit, x400 y20 w120 h20 v251, НИК
Gui, Add, Edit, x518 y20 w120 h20 v252, ОЧКИ
Gui, Add, Edit, x636 y20 w120 h20 v253, ДАТА
Gui, Add, Edit, x400 y40 w120 h20 v261, НИК
Gui, Add, Edit, x518 y40 w120 h20 v262, ОЧКИ
Gui, Add, Edit, x636 y40 w120 h20 v263, ДАТА
Gui, Add, Edit, x400 y60 w120 h20 v271, НИК
Gui, Add, Edit, x518 y60 w120 h20 v272, ОЧКИ
Gui, Add, Edit, x636 y60 w120 h20 v273, ДАТА
Gui, Add, Edit, x400 y80 w120 h20 v281, НИК
Gui, Add, Edit, x518 y80 w120 h20 v282, ОЧКИ
Gui, Add, Edit, x636 y80 w120 h20 v283, ДАТА
Gui, Add, Edit, x400 y100 w120 h20 v291, НИК
Gui, Add, Edit, x518 y100 w120 h20 v292, ОЧКИ
Gui, Add, Edit, x636 y100 w120 h20 v293, ДАТА
Gui, Add, Edit, x400 y120 w120 h20 v301, НИК
Gui, Add, Edit, x518 y120 w120 h20 v302, ОЧКИ
Gui, Add, Edit, x636 y120 w120 h20 v303, ДАТА
Gui, Add, Edit, x400 y140 w120 h20 v311, НИК
Gui, Add, Edit, x518 y140 w120 h20 v312, ОЧКИ
Gui, Add, Edit, x636 y140 w120 h20 v313, ДАТА
Gui, Add, Edit, x400 y160 w120 h20 v321, НИК
Gui, Add, Edit, x518 y160 w120 h20 v322, ОЧКИ
Gui, Add, Edit, x636 y160 w120 h20 v323, ДАТА
Gui, Add, Edit, x400 y180 w120 h20 v331, НИК
Gui, Add, Edit, x518 y180 w120 h20 v332, ОЧКИ
Gui, Add, Edit, x636 y180 w120 h20 v333, ДАТА
Gui, Add, Edit, x400 y200 w120 h20 v341, НИК
Gui, Add, Edit, x518 y200 w120 h20 v342, ОЧКИ
Gui, Add, Edit, x636 y200 w120 h20 v343, ДАТА
Gui, Add, Edit, x400 y220 w120 h20 v351, НИК
Gui, Add, Edit, x518 y220 w120 h20 v352, ОЧКИ
Gui, Add, Edit, x636 y220 w120 h20 v353, ДАТА
Gui, Add, Edit, x400 y240 w120 h20 v361, НИК
Gui, Add, Edit, x518 y240 w120 h20 v362, ОЧКИ
Gui, Add, Edit, x636 y240 w120 h20 v363, ДАТА
Gui, Add, Edit, x400 y260 w120 h20 v371, НИК
Gui, Add, Edit, x518 y260 w120 h20 v372, ОЧКИ
Gui, Add, Edit, x636 y260 w120 h20 v373, ДАТА
Gui, Add, Edit, x400 y280 w120 h20 v381, НИК
Gui, Add, Edit, x518 y280 w120 h20 v382, ОЧКИ
Gui, Add, Edit, x636 y280 w120 h20 v383, ДАТА
Gui, Add, Edit, x400 y300 w120 h20 v391, НИК
Gui, Add, Edit, x518 y300 w120 h20 v392, ОЧКИ
Gui, Add, Edit, x636 y300 w120 h20 v393, ДАТА
Gui, Add, Edit, x400 y320 w120 h20 v401, НИК
Gui, Add, Edit, x518 y320 w120 h20 v402, ОЧКИ
Gui, Add, Edit, x636 y320 w120 h20 v403, ДАТА
Gui, Add, Edit, x400 y340 w120 h20 v411, НИК
Gui, Add, Edit, x518 y340 w120 h20 v412, ОЧКИ
Gui, Add, Edit, x636 y340 w120 h20 v413, ДАТА
Gui, Add, Edit, x400 y360 w120 h20 v421, НИК
Gui, Add, Edit, x518 y360 w120 h20 v422, ОЧКИ
Gui, Add, Edit, x636 y360 w120 h20 v423, ДАТА
Gui, Add, Edit, x400 y380 w120 h20 v431, НИК
Gui, Add, Edit, x518 y380 w120 h20 v432, ОЧКИ
Gui, Add, Edit, x636 y380 w120 h20 v433, ДАТА
Gui, Add, Edit, x400 y400 w120 h20 v441, НИК
Gui, Add, Edit, x518 y400 w120 h20 v442, ОЧКИ
Gui, Add, Edit, x636 y400 w120 h20 v443, ДАТА
Gui, Add, Edit, x400 y420 w120 h20 v451, НИК
Gui, Add, Edit, x518 y420 w120 h20 v452, ОЧКИ
Gui, Add, Edit, x636 y420 w120 h20 v453, ДАТА
Gui, Add, Edit, x400 y440 w120 h20 v461, НИК
Gui, Add, Edit, x518 y440 w120 h20 v462, ОЧКИ
Gui, Add, Edit, x636 y440 w120 h20 v463, ДАТА
Gui, Add, Edit, x400 y460 w120 h20 v471, НИК
Gui, Add, Edit, x518 y460 w120 h20 v472, ОЧКИ
Gui, Add, Edit, x636 y460 w120 h20 v473, ДАТА
Gui, Add, Edit, x400 y480 w120 h20 v481, НИК
Gui, Add, Edit, x518 y480 w120 h20 v482, ОЧКИ
Gui, Add, Edit, x636 y480 w120 h20 v483, ДАТА
Gui, Add, Edit, x400 y500 w120 h20 v491, НИК
Gui, Add, Edit, x518 y500 w120 h20 v492, ОЧКИ
Gui, Add, Edit, x636 y500 w120 h20 v493, ДАТА
Gui, Show, x127 y87 h600 w770,
return

Или может есть идеи что можно было бы сделать вместе Edit?

Мне нужно оформление в виде таблицы, но редактируемое поле не нужно, ибо там должны выводиться данные получаемые из JS.

Пробовал так, но ничего не выводится в ячейку 01:

GuiControl,, 01, % GetInfoFromWebPage(js, hWnd)

12

Re: AHK: Получить список с сайта в таблице, с авторизацией

Michael пишет:

Работает только от имени администратора

Так не должно быть, у меня работает от обычного пользователя. Возможно, Хром у вас запускается от имени администратора.

Michael пишет:

Или может есть идеи что можно было бы сделать вместе Edit?

Я бы использовал ListView.

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

13 (изменено: Michael, 2023-05-03 20:28:28)

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker пишет:

Я бы использовал ListView.

Набросал вот так с ListView:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Gui, Add, ListView, r50 w700 gMyListView, Имя|Очки|Дата приема|Норма|Недобор

;Loop,
;    LV_Add()


Gui, Show
return

MyListView:

_________________________________________________________

Подскажите, пожалуйста, как привязать JS скрипты к ListView (первая строка):

Первая колонка:

document.getElementsByClassName("oc_1")[0].innerText

Вторая колонка:

document.getElementsByClassName("oc_3")[0].innerText 

Третья колонка

document.getElementsByClassName("oc_5")[0].innerText 

А по строкам нужно чтобы менялось значение [0], от 0 до 49

___________________________________________________________

То есть, вторая строка в ListView должна выводиться по таким скриптам:

Первая колонка:

document.getElementsByClassName("oc_1")[1].innerText

Вторая колонка:

document.getElementsByClassName("oc_3")[1].innerText


Третья колонка

document.getElementsByClassName("oc_5")[1].innerText 

Ну и так далее, до [49].

14

Re: AHK: Получить список с сайта в таблице, с авторизацией

Michael пишет:

Подскажите, пожалуйста, как привязать JS скрипты к ListView

Ничего привязывать не нужно, просто записывайте заранее полученные значения через LV_Add(), либо меняйте существующие через LV_Modify(), читайте справку по ним.

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

15 (изменено: Michael, 2023-05-04 01:22:22)

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker
Может не так выразился, но не выходит, пишет ошибку "Failed to get text" и не запускается вообще, или я что-то не так сделал?

if IsAdmin = 0
{

		CommandLine := DllCall("GetCommandLine", "Str")
		If !(A_IsAdmin || RegExMatch(CommandLine, " /restart(?!\S)")) 
		{
   				Try 
   				{
        				If (A_IsCompiled) 
        				{
           						Run *RunAs "%A_ScriptFullPath%" /restart
        				} 
				        Else 
				        {
				            	Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
				        }
    			}
   				ExitApp
		}

}


Gui, Add, ListView, r50 w700 gMyListView, Имя|Очки|Дата приема|Норма|Недобор

LV_Add(GetInfoFromWebPage(js, hWnd))


js := "document.getElementsByClassName('oc_1')[0].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw "Failed to get text"
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}


Gui, Show
return

MyListView:

UPDATE!

Нашел ошибку, в строке:

LV_Add(GetInfoFromWebPage(js, hWnd))

Поменял на:

LV_Add("", GetInfoFromWebPage(js, hWnd))

По итогу записалось нужное значение в таблицу, прогресс.

Пытаюсь вставить вторую строку в ListView, скопировал всё, и продублировал ниже, заменив только JS, на что получил ошибку:

Duplicate function definition.
Specifically: GetInfoFromWebPage(jsToGetInfo, hwnd)

Как мне остальные значения добавить в ListView?
Понимаю что тут должно быть что-то очень простое, но пока сижу туплю... Прошу помощи

16

Re: AHK: Получить список с сайта в таблице, с авторизацией

От администратора не выходит?

Michael пишет:

пишет ошибку "Failed to get text" и не запускается вообще

Если что-то пишет, значит запускается.

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

17

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker пишет:

От администратора не выходит?

Выше отписал, с администратором разобрался и с той ошибкой тоже, появился новый вопрос, он тоже в сообщении выше

18

Re: AHK: Получить список с сайта в таблице, с авторизацией

Michael пишет:

Duplicate function definition

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

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

19 (изменено: Michael, 2023-05-04 02:17:58)

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker пишет:
Michael пишет:

Duplicate function definition

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

Почитал, понял что функции достаточно одной на весь скрипт, добавлял только:

js := "document.getElementsByClassName('oc_1')[4].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))

Если добавлять 3-4 JS скрипта - работает адекватно, как должно, все выводится в ListView.

Если добавить все 50 сразу - после минуты выходит ошибка "An exception was thrown" и не добавляет ничего.

Я поставил задержку в 100мс между JS, но это не помогает. Может быть какой-то лимит?

Вот полный скрипт:

if IsAdmin = 0
{

		CommandLine := DllCall("GetCommandLine", "Str")
		If !(A_IsAdmin || RegExMatch(CommandLine, " /restart(?!\S)")) 
		{
   				Try 
   				{
        				If (A_IsCompiled) 
        				{
           						Run *RunAs "%A_ScriptFullPath%" /restart
        				} 
				        Else 
				        {
				            	Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
				        }
    			}
   				ExitApp
		}

}

Gui, Add, ListView, r50 w700 gMyListView, Имя|Очки|Дата приема|Норма|Недобор

js := "document.getElementsByClassName('oc_1')[0].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 2
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}

js := "document.getElementsByClassName('oc_1')[1].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[2].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[3].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[4].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[5].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[6].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[7].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[8].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[9].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[10].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[11].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[12].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[13].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[14].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[15].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[16].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[17].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[18].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[19].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[20].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[21].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[22].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[23].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[24].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[25].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[26].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[27].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[28].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[29].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[30].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[31].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[32].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[33].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[34].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[35].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[36].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[37].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[38].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[39].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[40].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[41].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[42].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[43].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[44].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[45].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[46].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[47].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[48].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))
Sleep, 100

js := "document.getElementsByClassName('oc_1')[49].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")

LV_Add("", GetInfoFromWebPage(js, hWnd))

Gui, Show
return

MyListView:

UPDATE!

Понял почему ошибка, колличество игроков в клане меняется (максимум 50).

И если игроков допустим 45, а JS  у меня на 50, то вылезает эта ошибка "An exception was thrown" и не добавляет ничего.

Можно как то обозначить, что в случае если JS ведут на пустые поля, чтобы не выдавало ошибку, и выдавало существующие?

20

Re: AHK: Получить список с сайта в таблице, с авторизацией

Michael пишет:

выдавало существующие?

Не очень понял, какие существующие. Можно так попробовать:

js := "(() => { let res = ''; try { res = document.getElementsByClassName('oc_1')[50].innerText; } catch(e) { res = 'текст, который будет выдаваться в случае ошибки'; } return res; })()"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker пишет:

Не очень понял, какие существующие.

Смотрите, возьмем конкретный пример, я как раз разобрался еще как заполнять другие столбцы и дополнил скрипт, вот его полный вариант:

if IsAdmin = 0
{

		CommandLine := DllCall("GetCommandLine", "Str")
		If !(A_IsAdmin || RegExMatch(CommandLine, " /restart(?!\S)")) 
		{
   				Try 
   				{
        				If (A_IsCompiled) 
        				{
           						Run *RunAs "%A_ScriptFullPath%" /restart
        				} 
				        Else 
				        {
				            	Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
				        }
    			}
   				ExitApp
		}

}

SetBatchLines, 1ms

Gui, Add, ListView, r50 w700 gMyListView, Ник|Очки|Дата приема|Должно быть очков|Недобор очков

js1 := "document.getElementsByClassName('oc_1')[0].innerText"
js2 := "document.getElementsByClassName('oc_3')[0].innerText"
js3 := "document.getElementsByClassName('oc_5')[0].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[1].innerText"
js2 := "document.getElementsByClassName('oc_3')[1].innerText"
js3 := "document.getElementsByClassName('oc_5')[1].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[2].innerText"
js2 := "document.getElementsByClassName('oc_3')[2].innerText"
js3 := "document.getElementsByClassName('oc_5')[2].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[3].innerText"
js2 := "document.getElementsByClassName('oc_3')[3].innerText"
js3 := "document.getElementsByClassName('oc_5')[3].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[4].innerText"
js2 := "document.getElementsByClassName('oc_3')[4].innerText"
js3 := "document.getElementsByClassName('oc_5')[4].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[5].innerText"
js2 := "document.getElementsByClassName('oc_3')[5].innerText"
js3 := "document.getElementsByClassName('oc_5')[5].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[6].innerText"
js2 := "document.getElementsByClassName('oc_3')[6].innerText"
js3 := "document.getElementsByClassName('oc_5')[6].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[7].innerText"
js2 := "document.getElementsByClassName('oc_3')[7].innerText"
js3 := "document.getElementsByClassName('oc_5')[7].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[8].innerText"
js2 := "document.getElementsByClassName('oc_3')[8].innerText"
js3 := "document.getElementsByClassName('oc_5')[8].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[9].innerText"
js2 := "document.getElementsByClassName('oc_3')[9].innerText"
js3 := "document.getElementsByClassName('oc_5')[9].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[10].innerText"
js2 := "document.getElementsByClassName('oc_3')[10].innerText"
js3 := "document.getElementsByClassName('oc_5')[10].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[11].innerText"
js2 := "document.getElementsByClassName('oc_3')[11].innerText"
js3 := "document.getElementsByClassName('oc_5')[11].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[12].innerText"
js2 := "document.getElementsByClassName('oc_3')[12].innerText"
js3 := "document.getElementsByClassName('oc_5')[12].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[12].innerText"
js2 := "document.getElementsByClassName('oc_3')[12].innerText"
js3 := "document.getElementsByClassName('oc_5')[12].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[12].innerText"
js2 := "document.getElementsByClassName('oc_3')[12].innerText"
js3 := "document.getElementsByClassName('oc_5')[12].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[13].innerText"
js2 := "document.getElementsByClassName('oc_3')[13].innerText"
js3 := "document.getElementsByClassName('oc_5')[13].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[14].innerText"
js2 := "document.getElementsByClassName('oc_3')[14].innerText"
js3 := "document.getElementsByClassName('oc_5')[14].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[15].innerText"
js2 := "document.getElementsByClassName('oc_3')[15].innerText"
js3 := "document.getElementsByClassName('oc_5')[15].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[16].innerText"
js2 := "document.getElementsByClassName('oc_3')[16].innerText"
js3 := "document.getElementsByClassName('oc_5')[16].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[17].innerText"
js2 := "document.getElementsByClassName('oc_3')[17].innerText"
js3 := "document.getElementsByClassName('oc_5')[17].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[18].innerText"
js2 := "document.getElementsByClassName('oc_3')[18].innerText"
js3 := "document.getElementsByClassName('oc_5')[18].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[19].innerText"
js2 := "document.getElementsByClassName('oc_3')[19].innerText"
js3 := "document.getElementsByClassName('oc_5')[19].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[20].innerText"
js2 := "document.getElementsByClassName('oc_3')[20].innerText"
js3 := "document.getElementsByClassName('oc_5')[20].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[21].innerText"
js2 := "document.getElementsByClassName('oc_3')[21].innerText"
js3 := "document.getElementsByClassName('oc_5')[21].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[22].innerText"
js2 := "document.getElementsByClassName('oc_3')[22].innerText"
js3 := "document.getElementsByClassName('oc_5')[22].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[23].innerText"
js2 := "document.getElementsByClassName('oc_3')[23].innerText"
js3 := "document.getElementsByClassName('oc_5')[23].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[24].innerText"
js2 := "document.getElementsByClassName('oc_3')[24].innerText"
js3 := "document.getElementsByClassName('oc_5')[24].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[25].innerText"
js2 := "document.getElementsByClassName('oc_3')[25].innerText"
js3 := "document.getElementsByClassName('oc_5')[25].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[26].innerText"
js2 := "document.getElementsByClassName('oc_3')[26].innerText"
js3 := "document.getElementsByClassName('oc_5')[26].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[27].innerText"
js2 := "document.getElementsByClassName('oc_3')[27].innerText"
js3 := "document.getElementsByClassName('oc_5')[27].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[28].innerText"
js2 := "document.getElementsByClassName('oc_3')[28].innerText"
js3 := "document.getElementsByClassName('oc_5')[28].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[29].innerText"
js2 := "document.getElementsByClassName('oc_3')[29].innerText"
js3 := "document.getElementsByClassName('oc_5')[29].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[30].innerText"
js2 := "document.getElementsByClassName('oc_3')[30].innerText"
js3 := "document.getElementsByClassName('oc_5')[30].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[31].innerText"
js2 := "document.getElementsByClassName('oc_3')[31].innerText"
js3 := "document.getElementsByClassName('oc_5')[31].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[32].innerText"
js2 := "document.getElementsByClassName('oc_3')[32].innerText"
js3 := "document.getElementsByClassName('oc_5')[32].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[33].innerText"
js2 := "document.getElementsByClassName('oc_3')[33].innerText"
js3 := "document.getElementsByClassName('oc_5')[33].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[34].innerText"
js2 := "document.getElementsByClassName('oc_3')[34].innerText"
js3 := "document.getElementsByClassName('oc_5')[34].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[35].innerText"
js2 := "document.getElementsByClassName('oc_3')[35].innerText"
js3 := "document.getElementsByClassName('oc_5')[35].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[36].innerText"
js2 := "document.getElementsByClassName('oc_3')[36].innerText"
js3 := "document.getElementsByClassName('oc_5')[36].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[37].innerText"
js2 := "document.getElementsByClassName('oc_3')[37].innerText"
js3 := "document.getElementsByClassName('oc_5')[37].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[38].innerText"
js2 := "document.getElementsByClassName('oc_3')[38].innerText"
js3 := "document.getElementsByClassName('oc_5')[38].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[39].innerText"
js2 := "document.getElementsByClassName('oc_3')[39].innerText"
js3 := "document.getElementsByClassName('oc_5')[39].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[40].innerText"
js2 := "document.getElementsByClassName('oc_3')[40].innerText"
js3 := "document.getElementsByClassName('oc_5')[40].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[41].innerText"
js2 := "document.getElementsByClassName('oc_3')[41].innerText"
js3 := "document.getElementsByClassName('oc_5')[41].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[42].innerText"
js2 := "document.getElementsByClassName('oc_3')[42].innerText"
js3 := "document.getElementsByClassName('oc_5')[42].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[43].innerText"
js2 := "document.getElementsByClassName('oc_3')[43].innerText"
js3 := "document.getElementsByClassName('oc_5')[43].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[44].innerText"
js2 := "document.getElementsByClassName('oc_3')[44].innerText"
js3 := "document.getElementsByClassName('oc_5')[44].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[45].innerText"
js2 := "document.getElementsByClassName('oc_3')[45].innerText"
js3 := "document.getElementsByClassName('oc_5')[45].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[46].innerText"
js2 := "document.getElementsByClassName('oc_3')[46].innerText"
js3 := "document.getElementsByClassName('oc_5')[46].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[47].innerText"
js2 := "document.getElementsByClassName('oc_3')[47].innerText"
js3 := "document.getElementsByClassName('oc_5')[47].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[48].innerText"
js2 := "document.getElementsByClassName('oc_3')[48].innerText"
js3 := "document.getElementsByClassName('oc_5')[48].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

js1 := "document.getElementsByClassName('oc_1')[49].innerText"
js2 := "document.getElementsByClassName('oc_3')[49].innerText"
js3 := "document.getElementsByClassName('oc_5')[49].innerText"
hWnd := WinExist("ahk_class Chrome_WidgetWin_1 ahk_exe chrome.exe")
LV_Add("", GetInfoFromWebPage(js1, hWnd), GetInfoFromWebPage(js2, hWnd), GetInfoFromWebPage(js3, hWnd))

GetInfoFromWebPage(jsToGetInfo, hwnd) {
   tempClip := ClipboardAll
   Clipboard := ""
   js := JsCopyTextFromWebPage(jsToGetInfo)
   RunJsFromChromeAddressBar(js, hwnd)
   ClipWait, 1
   err := ErrorLevel
   text := Clipboard
   Clipboard := tempClip
   if err
      throw
   Return text
}

JsCopyTextFromWebPage(jsToGetInfo) {
   js =
   (
      ((textToCopy) => {
         if (window.location.protocol === 'https:') {
            document.documentElement.focus();
            const timer = setInterval(() => {
               if (document.hasFocus()) {
                  clearInterval(timer);
                  navigator.clipboard.writeText(textToCopy);
               }
            }, 10);
         } else {
            const textArea = document.createElement('textarea');
            textArea.value = textToCopy;
            textArea.wrap = 'off';
            textArea.rows = 100000;
            textArea.style.position = 'fixed';
            document.documentElement.appendChild(textArea);
            textArea.focus();
            textArea.select();
            document.execCommand('copy');
            textArea.remove();
         }
      })(%jsToGetInfo%);
   )
   Return js
}

RunJsFromChromeAddressBar(js, hwnd) {
   static WM_GETOBJECT := 0x3D
        , ROLE_SYSTEM_TEXT := 0x2A
        , STATE_SYSTEM_FOCUSABLE := 0x100000
        , SELFLAG_TAKEFOCUS := 0x1
        , AccAddrBars := []
   if !AccAddrBars.HasKey(hwnd) {
      SendMessage, WM_GETOBJECT, 0, 1, Chrome_RenderWidgetHostHWND1, ahk_id %hwnd%
      AccChrome := AccObjectFromWindow(hwnd)
      AccAddrBars[hwnd] := SearchElement(AccChrome, {Role: ROLE_SYSTEM_TEXT, State: STATE_SYSTEM_FOCUSABLE})
   }
   AccAddrBar := AccAddrBars[hwnd]
   AccAddrBar.accValue(0) := "javascript:" . js
   Sleep, 100
   WinActivate, ahk_id %hwnd%
   AccAddrBar.accSelect(SELFLAG_TAKEFOCUS, 0)
   Sleep, 100
   Loop {
      ControlSend,, {Enter}, ahk_id %hwnd%, Chrome Legacy Window
      Sleep, 200
   } until AccAddrBar.accValue(0) != "javascript:" . js
}

SearchElement(parentElement, params)
{ ; params — object like {Role: ROLE_SYSTEM_PUSHBUTTON := 0x2B, Name: "5"}
   found := true
   for k, v in params {
      try {
         if (k = "State")
            (!(parentElement.accState(0)    & v) && found := false)
         else if (k ~= "^(Name|Value)$")
            (!(parentElement["acc" . k](0) ~= v) && found := false)
         else if (k = "ChildCount")
            (parentElement["acc" . k]      != v  && found := false)
         else
            (parentElement["acc" . k](0)   != v  && found := false)
      }
      catch 
         found := false
   } until !found
   if found
      Return parentElement
   
   for k, v in AccChildren(parentElement)
      if obj := SearchElement(v, params)
         Return obj
}

AccObjectFromWindow(hWnd, idObject = 0) {
   static IID_IDispatch   := "{00020400-0000-0000-C000-000000000046}"
        , IID_IAccessible := "{618736E0-3C3D-11CF-810C-00AA00389B71}"
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall("LoadLibrary", "Str", "oleacc", "Ptr")
        
   VarSetCapacity(IID, 16), idObject &= 0xFFFFFFFF
   DllCall("ole32\CLSIDFromString", "Str", idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, "Ptr", &IID)
   if DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject, "Ptr", &IID, "PtrP", pAcc) = 0
      Return ComObject(VT_DISPATCH, pAcc, F_OWNVALUE)
}

AccChildren(Acc) {
   static VT_DISPATCH := 9
   Loop 1  {
      if ComObjType(Acc, "Name") != "IAccessible"  {
         error := "Invalid IAccessible Object"
         break
      }
      try cChildren := Acc.accChildCount
      catch
         Return ""
      if !cChildren
         Return
      Children := []
      VarSetCapacity(varChildren, cChildren*(8 + A_PtrSize*2), 0)
      res := DllCall("oleacc\AccessibleChildren", "Ptr", ComObjValue(Acc), "Int", 0
                                                , "Int", cChildren, "Ptr", &varChildren, "IntP", cChildren)
      if (res != 0) {
         error := "AccessibleChildren DllCall Failed"
         break
      }
      Loop % cChildren  {
         i := (A_Index - 1)*(A_PtrSize*2 + 8)
         child := NumGet(varChildren, i + 8)
         Children.Push( (b := NumGet(varChildren, i) = VT_DISPATCH) ? AccQuery(child) : child )
         ( b && ObjRelease(child) )
      }
   }
   if error
      ErrorLevel := error
   else
      Return Children.MaxIndex() ? Children : ""
}

AccQuery(Acc) {
   static IAccessible := "{618736e0-3c3d-11cf-810c-00aa00389b71}", VT_DISPATCH := 9, F_OWNVALUE := 1
   try Return ComObject(VT_DISPATCH, ComObjQuery(Acc, IAccessible), F_OWNVALUE)
}

Gui, Show
return

MyListView:

Получается, скрипт на 50 (максимальное колличетсво) имен (опустим нюансы) в таблице.

В данный момент в клане 48 человек, соотвественно, таблица идет на 48 человек.

Мне нужно, чтобы скрипт, в случае, если таблица <50 строк, без всяких ошибок и уведомлений просто создавал таблицу на то колличество строк, которое сейчас есть на сайте.

И еще момент, время выполнения этого скрипта ~ 1 мин. 30 сек., можно как-то подускорить процесс? SetBatchLines - не помогает.

22 (изменено: Michael, 2023-05-04 05:34:11)

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker пишет:
js := "(() => { let res = ''; try { res = document.getElementsByClassName('oc_1')[50].innerText; } catch(e) { res = 'текст, который будет выдаваться в случае ошибки'; } return res; })()"

Это вставлять вместо js := "document.getElementsByClassName('oc_1')[50].innerText" ?

И как отсюда убрать сообщение ошибки? Чтобы его просто не было вообще.


UPDATE:

js := "(() => { let res = ''; try { res = document.getElementsByClassName('oc_1')[50].innerText; } catch(e) { res = 'текст, который будет выдаваться в случае ошибки'; } return res; })()"

Это работает, но только если такая строка одна, а у меня:

js1 := "(() => { let res = ''; try { res = document.getElementsByClassName('oc_1')[50].innerText; } catch(e) { res = 'Пусто'; } return res; })()"
js2 := "(() => { let res = ''; try { res = document.getElementsByClassName('oc_2')[50].innerText; } catch(e) { res = 'Пусто'; } return res; })()"
js3 := "(() => { let res = ''; try { res = document.getElementsByClassName('oc_3')[50].innerText; } catch(e) { res = 'Пусто'; } return res; })()"

Подскажите, где тут ошибка?

23

Re: AHK: Получить список с сайта в таблице, с авторизацией

Попробуйте догадаться.

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

24

Re: AHK: Получить список с сайта в таблице, с авторизацией

Michael пишет:

И еще момент, время выполнения этого скрипта ~ 1 мин. 30 сек., можно как-то подускорить процесс?

Напишите javascript, который будет получать все нужные тексты за раз.

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

25

Re: AHK: Получить список с сайта в таблице, с авторизацией

teadrinker пишет:

Напишите javascript, который будет получать все нужные тексты за раз.

Был у ребят на форуме JS, сказали что в AutoHotKey можно создать цикл с подстановкой значений (по сути номер итерации) в скрипт.
И то, что лучше этот вопрос задать в форуме по AutoHotkey.
Помогите пожалуйста разобраться...

26

Re: AHK: Получить список с сайта в таблице, с авторизацией

То, что мы до этого делали, по сути и есть цикл с подстановкой значений. Хотите, платно возьмусь написать js, так лень возиться.

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