Что нового

Проверка номеров на их существование.

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt 3.

Существует файл item-ISBN-Preis.тхт
Выглядит он вот так

Item: 120936938606 ISBN-10: 3800147807 ISBN-13: 9783800147809 Price: 85,00 EUR
Item: 120934799016 ISBN-10: 3931589757 ISBN-13: 9783931589752 Price: 11,80 EUR
Item: 221050894323 ISBN-10: 3440058719 ISBN-13: 9783825852054 Price: 0,01 EUR
Item: 221050894324 ISBN-10: 3440063704 ISBN-13: Price: 0,01 EUR
Item: 221050894326 ISBN-10: 3440055000 ISBN-13: 9783452267573 Price: 0,01 EUR
Item: 221050894327 ISBN-10: 3440061299 ISBN-13: 9783406438684 Price: 0,01 EUR
Item: 221050894329 ISBN-10: 3440066398 ISBN-13: 9783423620321 Price: 0,01 EUR
Item: 221050894330 ISBN-10: 3440067920 ISBN-13: 9783453085213 Price: 0,03 EUR
Item: 221050894318 ISBN-10: 3440062384 ISBN-13: Price: 0,01 EUR

В нём 9 столбиков.
Мне нужно что бы программа брала из 6-го столбика строку например 9783800147809 и автоматически вставляла её в поиск http://www.buchhandel.de/ в поисковике " buchhandel.de". Если же например номер в столбике 6 отсутствует, то программа должна брать номер из 4-го столбика. Если номер был найден то строка остаётся, если номер был не найде на этом сайте, то строка полностью должна быть удалена. (полностью целый ряд Item: 120936938606 ISBN-10: 3800147807 ISBN-13: 9783800147809 Price: 85,00 EUR). В конце программа должна сохранить результат в новом файле тхт формата. Очень важна скорость перебора.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Dk,
Уберите теги b - /b.
 

MrZLO

Suum cuique
Сообщения
15
Репутация
4
Даю наводку.

Код:
window.byAutoitSetNum = 3800147807;

var 
 byJSLoadedFrame = window.document.getElementById('m_frmCenterContent'),
 txtBooksForm = byJSLoadedFrame.contentDocument.getElementsByName('buchhandelde')[0],
 srchInput = null;

for (var i=0; i<txtBooksForm.childNodes.length; i++) {
    if (
        txtBooksForm.childNodes[i].tagName 
        && txtBooksForm.childNodes[i].tagName.toLowerCase() == 'input'
    ) {
        srchInput = txtBooksForm.childNodes[i];
        break;
    }
}
if (srchInput === null) {
  alert('Something wrong');
  alert(a=10 / (b =0));
}

srchInput.value = ('' + window.byAutoitSetNum) || 'nenum';

byJSLoadedFrame.contentWindow.onQuickSearch();//произошел сабмит
  //смотри анчор рядом с формой(ну и для позновательных целей ф-ю в основном window.doQuickSearch(strCalled))

как обычно, в конце, на ум пришел способ проще:
_http://www.buchhandel.de/default.aspx?strframe=titelsuche&caller=vlbPublic&nSiteId=11&Func=Search&stichwort=3800147807

PS
если JSom то надо дождаться загрузки фрейма...
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Как успехи :-[ :-[ :-[ ?
 

MrZLO

Suum cuique
Сообщения
15
Репутация
4
То-ли немцы гады, то-ли CMS писали сволочи, как бы там ни было ИЕ не отдает body пока не загрузиться(какой-то трюк на задержку) фрейм.

Забирай, если не поздно...

PS
Пишу граббинг по крупнее решил потренироваться ;)
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Толи я что то не то делаю....
Не работает. Открывается Експлорер, потом окошко. Со веременем и подсчётом. Но ничего не происходит.
Я не вижу ни перебора ничего. Показывает что нашёл 0. и Файл даже не создал.
Я открыл скрипт и не нашёл с какого файла он считывает номера.
пс
Программа мне ета оочень нужна. Так как 10 тыс в каждые два дня мне надо делать, первые 10 тыс придётся наверно в ручную(((

Может попробуете черер www.amazon.de как я вам в личку писал? там нет никаких хитростей точно.

Я нашёл строчку

$data = FileRead(@ScriptDir & '/item-ISBN-Preis.Ñ‚Ñ…Ñ‚')

я так понимаю там должно быть за место "item-ISBN-Preis.Ñ‚Ñ…Ñ" item-ISBN-Preis.тхт‚Ñ…Ñ или ???
Каракули ?? или так и должно быть?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MrZLO [?]
То-ли немцы гады, то-ли CMS писали сволочи
Отключите JScript в браузере (любом) и увидите в чём проблема ;)
Контент строится с помощью функции display
Код:
<body onload="JavaScript:display('m_divCenterContent', 'http://www.buchhandel.de/WebApi1/titelsuche.asp?caller=vlbPublic&amp;nSiteId=11&amp;Func=Search&amp;stichwort=9783800147809&amp;'); fitWindow();;LoadAds();">
Посему как такового HTML документа нет, браузер строит его динамически посредством JScript функций.
 

MrZLO

Suum cuique
Сообщения
15
Репутация
4
И вы, таки думаете, что я этого не сделал?
Немцы даже не загружают контент без ЖС! 250 байт чтоли...

Э..) я не о том.
У мну щаз инет слабый, и мне на глаз видно что его(фрейма) "боди-реди"... а он...

PS
Я слегка параноик, и для граббинга начал юзать автоит, чтобы совсем без, палева...
Мимо фрейма не пойду...
А вдруг подсунут дизинфо?)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MrZLO [?]
У мну щаз инет слабый, и мне на глаз видно что его(фрейма) "боди-реди"... а он...
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Модератор.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MrZLO
Трудно мне вас понимать, я как-то по-русски больше привык, извините. :blink:

Dk [?]
Может попробуете черер httр://amazon.de
Попробуйте (через IE)

Код:
#include <IE.au3>
#include <Array.au3>

Dim $sURL = 'http://www.amazon.de'
Dim $sOk = ''
Dim $i= 0, $i_Package = 100

$oIE = _IECreate($sURL)

$hFile = FileOpen('item-ISBN-Preis.тхт', 0)
If $hFile = -1 Then
    MsgBox(0, @ScriptName, "Файл не найден.")
    Exit
EndIf

While 1
	
	$oForm = _IEFormGetObjByName($oIE, 'site-search')
	$oInput = _IEFormElementGetObjByName($oForm, 'field-keywords')
	
    Local $sLine = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
	$aResult = StringRegExp($sLine, '(?:Item|ISBN-\d+)\:.*?(\d+)\b', 3)
	
	;_ArrayDisplay($aResult)
	
	If Not Number($aResult[2]) Then
		_IEFormElementSetValue($oInput, $aResult[1])
	Else
		_IEFormElementSetValue($oInput, $aResult[2])
	EndIf
	
	Sleep(2000) ; чтобы не сильно нагружать сайт
	
	_IEFormSubmit($oForm, 0)
	_IELoadWait($oIE)

	$oElements = _IETagNameGetCollection($oIE, 'h1')
	For $oElement In $oElements
		If $oElement.id == "breadCrumb" Then
			$sOk &= $sLine & @CRLF
			If $i = $i_Package Then
				_FileWrite('ok.txt', $sOk)
				$sOk = ''
				$i = 0
			EndIf
			$i += 1
		ElseIf $oElement.id == "noResultsTitle" Then
		EndIf
	Next
	
WEnd

If $sOk <> '' Then _FileWrite('ok.txt', $sOk)
	
FileClose($hFile)

Func _FileWrite($s_File, $s_Data)
	
	$h_FileTmp = FileOpen($s_File, 1)
	If $h_FileTmp = -1 Then
		MsgBox(0, @ScriptName, "Файл не найден.")
		Exit
	EndIf
	
	FileWrite($h_FileTmp, $s_Data)
	FileClose($h_FileTmp)
EndFunc
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Да всё правильно.

Я к сожалению не указал на форуме уточнение, а написал их в личку MrZLO

Мне нужно что бы если есть цена от самого амазаона (она в самом верху) вот сдесь пример http://www.amazon.de/gp/product/3482707308, то строка сохронялась, если её нет как например вот сдесь http://www.amazon.de/gp/product/3631536658 то удалялась.
Я извинаюсь за то, что не написал ето сдесь... я думал больше никто участие не принимает :-[ :-[ :-[
 

MrZLO

Suum cuique
Сообщения
15
Репутация
4
Garret
Не хотелось расписывать.
Сделал по шаблонному URL(вставка строки поиска), то, что грузиться в Iframe идет теперь на страницу.

Я так понял вам понятна суть процессов той CMS(подгрузка из "/WebApi1/" реального контента).

Вопрос.
Это для оптимизации к поисковикам? или наоборот, типа copyrights?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Это ты меня спрашиваешь ?
Я чёт вообще уже вечером :stars:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dk [?]
Мне нужно что бы если есть цена от самого амазаона ... то строка сохронялась, если её нет ... то удалялась.
Код:
#include <IE.au3>
#include <Array.au3>

Dim $sURL = 'http://www.amazon.de'
Dim $sOk = ''
Dim $i= 0, $i_Package = 100

$oIE = _IECreate($sURL)

$hFile = FileOpen('item-ISBN-Preis.txt', 0)
If $hFile = -1 Then
    MsgBox(0, @ScriptName, "Файл не найден.")
    Exit
EndIf

While 1
	
	$oForm = _IEFormGetObjByName($oIE, 'site-search')
	$oInput = _IEFormElementGetObjByName($oForm, 'field-keywords')
	
    Local $sLine = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
	$aResult = StringRegExp($sLine, '(?:Item|ISBN-\d+)\:.*?(\d+)\b', 3)
	
	;_ArrayDisplay($aResult)
	
	If Not Number($aResult[2]) Then
		_IEFormElementSetValue($oInput, $aResult[1])
	Else
		_IEFormElementSetValue($oInput, $aResult[2])
	EndIf
	
	Sleep(2000) ; чтобы не сильно нагружать сайт
	
	_IEFormSubmit($oForm, 0)
	_IELoadWait($oIE)

	$oElements = _IETagNameGetCollection($oIE, 'div')
	For $oElement In $oElements
		If $oElement.className == "newPrice" Then
			$sOk &= $sLine & @CRLF
			If $i = $i_Package Then
				_FileWrite('selected.txt', $sOk)
				$sOk = ''
				$i = 0
			EndIf
			$i += 1
		EndIf
	Next
	
WEnd

If $sOk <> '' Then _FileWrite('selected.txt', $sOk)
	
FileClose($hFile)

FileCopy('selected.txt', 'item-ISBN-Preis.txt', 1)
FileDelete('selected.txt')

Func _FileWrite($s_File, $s_Data)
	
	$h_FileTmp = FileOpen($s_File, 1)
	If $h_FileTmp = -1 Then
		MsgBox(0, @ScriptName, "Файл не найден.")
		Exit
	EndIf
	
	FileWrite($h_FileTmp, $s_Data)
	FileClose($h_FileTmp)
EndFunc
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Спасибо всем кто помог. :-[
 
Верх