Что нового

[Сеть, интернет] Как скпировать из HTML содержимое элемента по Id?

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Мой первый вариант:
Код:
$oResults	= _IEGetObjById($Obj1, 'wrapper')
	$sContent 	= _IEPropertyGet($oResults, "innerhtml")
	ClipPut($sContent)

Оказался неудачным. При вставке в ворд вставляется тупо текст вместе с тегами HTML.

Вариант:
Код:
$oResults	= _IEGetObjById($Obj1, 'wrapper')	
	_IEAction($oResults, "selectall")
	_IEAction($oResults, "copy")
	_IEAction($oResults, "unselect")

В Word вставляется этот текст отлично и с форматированием... но таким образом копируется вообще всё содержимое страницы.

Как быть?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Mr. Anderson
Если я Вас правильно понял, то попробуйте так:
Код:
#include <IE.au3>

$sUrl = 'http://autoit-script.ru/'
$oIE = _IECreate($sUrl)
$oNews = _IEGetObjById($oIE, 'random_news')
;MsgBox(64, '1', _IEPropertyGet($oNews, 'innertext'));одинаково с
MsgBox(64, '2', $oNews.innertext)
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Да не. Мне надо что бы при копировании таблицы с сайта в Word таблица оставалась таблицей
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson сказал(а):
Как скопировать из HTML содержимое элемента по ID?
Код:
#include <IE.au3>

; Копируем объект в данном случае таблицу где [id="wrapper"]
_IECopyObjById($oIE, "wrapper") 
If Not @error Then
	MsgBox(64, Default, "Скопировано!")
EndIf

Func _IECopyObjById(ByRef $o_Object, $s_ID)
	Local $oCtlRange
	If IsObj($o_Object.document.getElementById($s_ID)) Then
		$oCtlRange = $o_Object.document.body.createControlRange()
		$oCtlRange.add($o_Object.document.getElementById($s_ID))
		$oCtlRange.execCommand('Copy')
		Return SetError(0)
	Else
		Return SetError(1)
	EndIf
EndFunc

Далее открываем Word и делаем Ctrl+V или как подобает Autoit-Scripter`у автоматизируем процесс ;)
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Ух ты! Здорово! Было б вообще шикарно понять, что это за магические строки:
Код:
$oCtlRange = $o_Object.document.body.createControlRange()
$oCtlRange.add($o_Object.document.getElementById($s_ID))
$oCtlRange.execCommand('Copy')
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson [?]
Было б вообще шикарно понять, что это за магические строки
Это DHTML (Dynamic HTML Object Model)

Код:
;~ 	Возвращает ссылку на объект с указанным значением ID
$o_Object.document.getElementById($s_ID)
;~ 	Создает в заданной области/диапазоне (controlRange) коллекцию нетекстовых элементов .
$oCtlRange = $o_Object.document.body.createControlRange()
;~ 	Добавляет элемент в область/диапазон (controlRange)
$oCtlRange.add($o_Object.document.getElementById($s_ID))
;~ 	Выполняет команду с текущим документом, текущим выделением, или заданным диапазоном (controlRange).
$oCtlRange.execCommand('Copy')
 

mousekey

вот он какой, серверный олень
Сообщения
8
Репутация
5
Такой вопрос -
Код:
_MainLoop()
Func _MainLoop()
; тут когда-нибудь будет цикл-шмыкл
	$sUrl = 'http://какой-то урля'
	$oIE = _IECreate($sUrl)


	_IECopyObjById($oIE, "someIdAtThisUrl")
	If Not @error Then
		MsgBox(64, Default, "Скопировано!")
	EndIf

EndFunc   ;==>_MainLoop


Func _IECopyObjById(ByRef $o_Object, $s_ID)
	Local $oCtlRange
	If IsObj($o_Object.document.getElementById($s_ID)) Then
		$oCtlRange = $o_Object.document.body.createControlRange()
		$oCtlRange.add($o_Object.document.getElementById($s_ID))
		$oCtlRange.execCommand('Copy')
		Return SetError(0)
	Else
		Return SetError(1)
	EndIf
EndFunc   ;==>_IECopyObjById


код отрабатывает, месседж-бокс пишет Скопировано!, однако в буфер обмена ничего не добавляется. Что я делаю не так? Надо отдельно как-то в буфер что-то пихать или какую-то настройку в IExplorer'e включить?


При этом код
Код:
$oIE = _IECreate($sUrl)


$oNews = _IEGetObjById($oIE, 'someIdAtThisUrl')
;MsgBox(64, '1', _IEPropertyGet($oNews, 'innertext'));одинаково с

MsgBox(64, '2', $oNews.innertext)


прекрасно отрабатывает и показывает мсбокс с текстом, но форматирование там очень плохое, часть слов слипшаяся, вобщем - не то. Чую ответ где-то близко...

upd: оказывается на виртуалке был старый IE, обновил - заработало. Заодно еще включил опцию, чтобы не выскакивало каждый раз с вопросом окно "вы хотите позволить скрипту скопировать данные в буфер обмена" - Allow programmatic lipboard access на Enable:
 
Верх