1 (изменено: seriyforum, 2018-04-25 16:24:37)

Тема: AHK: Парсинг страницы

Доброго времени суток, полазил по форуму нашёл скрипт для авторизации на сайте, который смог переделать под себя. Авторизация проходит но дальше знаний не хватает для того чтобы вытащить текст из нужных страниц сайта. Помогите пожалуйста.

url := "http://ulog.union-u.net/login.php"
login := "maiil"
password := "pass"
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", url)
WebRequest.Send()
loginBody := "form_sent=1&redirect_url=http%3A%2F%2Fulog.union-u.net%2Flogin.php&mail=" login "&pass=" password "&login=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"
WebRequest.Open("POST", url)
WebRequest.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
WebRequest.Send(loginBody)
If Instr(WebRequest.ResponseText, "Вы вошли на сайт!")
   msgbox All Ok!
Else
   msgbox Failed!

Код страницы, текст которой хочу копировать.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Сервер: Scottdale | Unlimited Log</title>
<link href="skins/black_ulog/styles.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
</head>

<body><div class="menu"><table width="100%"><tr><td valign="top"><script>

	$(document).ready(function()
	{
		$(".menu").on("click", "a[rel!=no]", function()
		{
			//alert($(this).attr("href"));
			document.title = $(this).find("li").text() + " | Unlimited Log.";
			var url=$(this).attr("href");
			setLocation(url);
			$(".right").load(url + " #content");
			return false;
		});

		//fastanswer
		$("#content").on("click", "a[edit=on]", function()
		{
			//alert("#answer" + ($(this).attr("editid")));
			var $answerid =  $("#answer" + ($(this).attr("editid")));
			
			
			$answerid.html("<input type=text value='" + $("#answer" + ($(this).attr("editid"))).text() + "' /><a cancelid='" + $(this).attr("editid") + "' href='' cancel=on>Отмена</a>");
			$(this).attr("edit", "off");
			return false;
		});
		$("#content").on("click", "a[edit=off]", function()
		{
			//alert("ok");
			var editbuttom = $(this);
			var $answerid =  $("#answer" + ($(this).attr("editid")));

			//alert($("#answer" + ($(this).attr("editid")) + " input").val());
			
			$.post("fastanswer.php", {
				id: ($(this).attr("editid")),
				answer: $("#answer" + ($(this).attr("editid")) + " input").val(),
				do: 1
				},
				function(data)
				{
					$(editbuttom).attr("edit", "on");
					//alert("ok" + data);
					$answerid.text(data);
				}
			);
			
			return false;
		});
		$("#content").on("click", "a[cancel=on]", function()
		{
			var $answerid =  $("#answer" + $(this).attr("cancelid"));
			$("#answer" + $(this).attr("cancelid")).text($("#answer" + $(this).attr("cancelid") + " input").attr("value"));
			$("a[editid=" + $(this).attr("cancelid") + "]").attr("edit", "on");
			return false;
		});

		$("#content").on("click", "a[del=on]", function()
		{
			var $buttom = $(this);
			if(confirm("Удалить быстрый ответ? \n Ответ: " + $("#answer" + $(this).attr("delid")).text() ) ) 
			{
				$.post("fastanswer.php", {
					id: ($(this).attr("delid")),
					answer: $("#answer" + ($(this).attr("delid")) + " input").val(),
					do: 2
					},
					function(data)
					{
						//alert(data);
						$("#tr" + $buttom.attr("delid")).detach();
					}
				);
			}
			return false;
		});
	});


	function setLocation(curLoc){
	    try {
	      history.pushState(null, null, curLoc);
	      return;
	    } catch(e) {}
	    location.hash = "#" + curLoc;
	}


	</script><a href='index.php'><li>Главная</li></a><a href='fastanswer.php' rel='yes'><li>FastAnswer</li></a><a href='racing.php' rel='yes'><li>Гонки</li></a><a href='index.php?server=1' rel='yes'><li>Phoenix</li></a><a href='index.php?server=2' rel='yes'><li>Tucson</li></a><a href='index.php?server=3' rel='yes'><li>Scottdale</li></a><a href='index.php?server=4' rel='yes'><li>Chandler</li></a><a href='index.php?server=5' rel='yes'><li>BrainBurg</li></a><a href='index.php?server=8' rel='yes'><li>SaintRose</li></a><a href='index.php?server=9' rel='yes'><li>Mesa</li></a><a href='index.php?server=6' rel='yes'><li>Central</li></a><a href='search_in.php' rel=no><li>Поиск в бд сервера</li></a></td><td valign="top"><form action='search.php?server=3' method='GET'><center><input type='text' name='searchtext' value=''/><input type='submit' name='search' value='Поиск'/></center></form></td><td valign="top"><a href='user.php?id=733'><li>Xavier_Cooper</li></a>
	<a href='outuser.php' rel=no><li>Выйти</li></a></td></tr></table></div>
    <div class="right"><div id="content">
    <table width="100%" border="0">
  <tbody>
    <tr>
      <td class="top"><h1>Сервер: Scottdale</h1></td>
    </tr>
    <tr>
      <td class="middel"><div class="box">
        <div class="boxtitle">scottdale</div><table width='100%'><tr><td>Укажите дату<br>
			<form action='/event.php' method='GET'>
			<input type=hidden name=server value=3 />
			<input type=hidden name=type value='' />
			<table width='100%'>
			<tr><td>День</td><td>
			.....

2

Re: AHK: Парсинг страницы

Исходный код страницы находится в переменной WebRequest.ResponseText.
Посылаете get запрос по нужной вам ссылке и должны получить.

3

Re: AHK: Парсинг страницы

Как это сделать?

4

Re: AHK: Парсинг страницы

Вы в своем коде зачем-то вначале отправляете get запрос:

WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", url)
WebRequest.Send()

А потом post:

loginBody := "form_sent=1&redirect_url=http%3A%2F%2Fulog.union-u.net%2Flogin.php&mail=" login "&pass=" password "&login=%D0%92%D0%BE%D0%B9%D1%82%D0%B8"
WebRequest.Open("POST", url)
WebRequest.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
WebRequest.Send(loginBody)

5

Re: AHK: Парсинг страницы

Я переделывал код под себя,  взяв его на просторах данного форума)

6

Re: AHK: Парсинг страницы

Get отправляем, чтобы получить информацию.
Post, чтобы отправить.

7

Re: AHK: Парсинг страницы

Спасибо получилось, но немного не так как я хотел, он копирует код страницы со всеми элементами.
Можно но ли как-то из этого получить простой текст, который отображается на сайте без лишнего html и java кода

8 (изменено: stealzy, 2018-04-27 00:09:37)

Re: AHK: Парсинг страницы

Такая тема уже была, пользуйтесь поиском: http://forum.script-coding.com/viewtopic.php?id=9394.

9

Re: AHK: Парсинг страницы

seriyforum пишет:

Можно но ли как-то из этого получить простой текст, который отображается на сайте без лишнего html и java кода

Можно через HTMLfile:

document := ComObjCreate("HTMLfile")
document.Open()
document.Close()
document.body.innerHTML := WebRequest.ResponseText
msgbox % document.body.innerText

10 (изменено: Malcev, 2018-04-26 13:38:57)

Re: AHK: Парсинг страницы

stealzy, не, просто ваш вариант не совсем верный:

text = 
(
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<script>скрипт не должен быть виден</script> а это должно
)

oHTML := ComObjCreate("HtmlFile")
oHTML.write(text)
msgbox %  oHTML.documentElement.innerText

document := ComObjCreate("HTMLfile")
document.Open()
document.Close()
document.body.innerHTML := text
msgbox % document.body.innerText

11

Re: AHK: Парсинг страницы

Спасибо, всё работает.

12

Re: AHK: Парсинг страницы

stealzy пишет:

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

У меня в первом варианте выводит "скрипт не должен быть виден а это должно".
Во втором же - " а это должно".
Какая у вас полная версия IE?

13

Re: AHK: Парсинг страницы

Встроенная восьмая, интересно какая конкретно из подключенных библиотек влияет:

ieframe.dll
mshtml.dll
winhttp.dll
urlmon.dll
jscript.dll
webio.dll
wininet.dll

14 (изменено: Malcev, 2018-04-26 21:46:51)

Re: AHK: Парсинг страницы

Думаю mshtml.dll.
У меня он 11.00.9600.18978.

15

Re: AHK: Парсинг страницы

У меня восьмой соответсвенно.
Оказалось что в .documentElement попадает еще и содержимое тега <title>, так что ваш способ корректнее.

16 (изменено: Malcev, 2018-05-09 02:52:34)

Re: AHK: Парсинг страницы

Всё-таки в данном случае правильней, наверное, так:

text = 
(
<title>test</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE">
<div>div</div>
<script>скрипт не должен быть виден</script> а это должно
)

oHTML := ComObjCreate("HtmlFile")
oHTML.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=8"">")   ; не смотря на значения в реестре или хтмл файле, будет работать в режиме совместимости IE8
oHTML.write(text)
msgbox % oHTML.documentmode
msgbox % oHTML.body.innerText

Так как при режиме совместимости 9 и выше цепляется текст внутри тага script:

text = 
(
<title>test</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE">
<div>div</div>
<script>скрипт не должен быть виден</script> а это должно
)

oHTML := ComObjCreate("HtmlFile")
oHTML.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
oHTML.write(text)
msgbox % oHTML.documentmode
msgbox % oHTML.body.innerText