none
Powershell Получить содержимое web страницы (invoke-webrequest итд) RRS feed

  • Вопрос

  • Добрый день.

    Возможно ли получить содержимое главной страницы сайта только не файла index.html а именно код загруженной страницы? Тоесть такой код как выдает допустим Google Chrome при функции "Посмотреть код"

    С помощью Inkove-WebRequest можно ли? или какие нибудь есть другие способы?

    12 октября 2016 г. 6:33

Ответы

  • В IE(не в EDGE) страница запускается? 

    Для всех зон в IE включен Protected Mode?

    Для теста добавить сайт в Tools > Options > Security Tab > Trusted Site.

    Проверить исключение в firewall для iedriverserver.exe.

    Проверить в chrome ,скачать драйвер - https://sites.google.com/a/chromium.org/chromedriver/downloads

    $ie = New-Object OpenQA.Selenium.Chrome.ChromeDriver

    • Помечено в качестве ответа [technoir] 13 октября 2016 г. 8:02
    13 октября 2016 г. 7:44
    Отвечающий

Все ответы

  • Только не Inkove-WebRequest, а Invoke-WebRequest.

    (Invoke-WebRequest ya.ru).RawContent

    12 октября 2016 г. 6:39
    Отвечающий
  • Спасибо за ответ, но не помогло..

    Вообщем смысл таков. В коде есть Javascript блок

    <script type="text/javascript" src="http://XXXXXXXX.js"></script>

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

    А RawContent все равно выдает в первоначальном виде.

    12 октября 2016 г. 7:18
  • Приведите ссылку, где есть скрипт. В таком случае использовать IE и найти элемент через all:

    $ie = new-object -ComObject "InternetExplorer.Application" $ie.navigate("ya.ru")

    $ie.Document.all

    и проверить body:

    $ie.Document.body.innerhtml



    • Изменено KazunEditor 12 октября 2016 г. 7:29
    12 октября 2016 г. 7:24
    Отвечающий
  • Сейчас попробую.

    Ссылка: malias.ml

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

    12 октября 2016 г. 7:43
  • Тоже не помогло, не выдал эти ссылки
    12 октября 2016 г. 9:14
  • Тоже не помогло, не выдал эти ссылки
    Показывайте по шагам,как получить ссылку  в браузере с скриншотом.
    12 октября 2016 г. 9:22
    Отвечающий
  • Вообщем я в итоге хочу выполнить клик по обьекту средствами Powershell.

    Объект в index.html задан javascript кодом <script type="text/javascript" src="http://XXXXXXXX.js"></script>

    При загрузке страницы данный код преображается в рекламный блок,состоящий из 3 картинок с ссылками.

    Но чтобы кликнуть надо для начала получить ссылку хотябы одного из трех блоков.

    В Google Chrome функция "Посмотреть код" выдает следующее

    12 октября 2016 г. 9:49
  • $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = 1
    $ie.Navigate("http://malias.ml/")
    $frames = $ie.Document.getElementsByTagName("iframe")
    $frame = $frames.Item(0)
    $ie.Navigate($frame.src)
    $ie.Document.links | Where {$_.textContent} |  ft textContent,href

    Вывод:

    S (STA) > $ie.Document.links | ? textContent |  ft textContent,href
    
    extContent                                                         href
    ----------                                                         ----
    aily Mail показала фото тайных жены и детей Владимира Путина       http://iwhha.top/info.php?c=djQub2lTQzVEQk1CTGxQ
    то должны видеть все: полиция защищает Порошенко от стада баранов! http://iwhha.top/info.php?c=djQub2lTQzVEQk1CTGxQ
    Пропутинские леопарды": зверинец в Польше заподозрили в измене!    http://iwhha.top/info.php?c=djQub2lTQzVEQk1CTGxQ

    12 октября 2016 г. 10:51
    Отвечающий
  • Спасибо!

    Я запускаю скрипт, открывается IE, затем открывается Frame  с тремя рекламами, но в выводе вылазиет ошибка

    $ie.Visible = 1
    $ie.Navigate("http://malias.ml/")
    $frames = $ie.Document.getElementsByTagName("iframe")
    $frame = $frames.Item(0)
    $ie.Navigate($frame.src)
    $ie.Document.links | Where {$_.textContent} |  ft textContent,href
    Произошла ошибка при перечислении элементов коллекции: Вызванный объект был отключен от клиентов. (Исключение из HRESULT: 0x80010108 (RPC_E_DISCONNECTED)).
    строка:7 знак:1
    + $ie.Document.links | Where {$_.textContent} |  ft textContent,href
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (System.Runtime....ewOfEnumVariant:EnumeratorViewOfEnumVariant) [], RuntimeException
        + FullyQualifiedErrorId : BadEnumeration

    А как сделать так чтобы не открывался frame,а сразу переходил по одной из этих трех ссылок в фрейме? Тоесть как будто зашел и кликнул по одному из трех изображений/ссылок

    12 октября 2016 г. 11:10
  • $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = 1
    $ie.Navigate("http://malias.ml/")
    while($ie.busy) {Start-Sleep 1}
    if($ie.Document) 
    {
    	$frames = $ie.Document.getElementsByTagName("iframe")
    	$frame = $frames.Item(0)
    	$fsrc = $frame.src
    	if($fsrc)
    	{
    		$ie.Navigate("$fsrc")
    		while($IE.busy) {Start-Sleep 1}
    		$ie.Navigate("$fsrc")
    		while($IE.busy) {Start-Sleep 1}
    		$link = $ie.Document.links | Where {$_.textContent} | Get-Random | Foreach {$_.href}
    		$ie.Navigate("$link",2048)
    		while($IE.busy) {Start-Sleep 1}
    	}
    }
    $h = $ie.HWND
    $ie.quit()
    Get-Process | Where {$_.MainWindowHandle -eq $h} | Stop-Process -Force
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($ie) | Out-Null

    12 октября 2016 г. 12:00
    Отвечающий
  • Спасибо большое!!

    Пара вопросов по коду..

    1. Зачем 2 раза?

    		$ie.Navigate("$fsrc")
    		while($IE.busy) {Start-Sleep 1}

    2. Без перехода на $fsrc не получиться реализовать задумку?

    12 октября 2016 г. 12:14
  • http://www.seleniumhq.org/download/ - качаем драйвер для IE и саму библиотеку. Копируем драйвер в папку "C:\selenium-dotnet-3.0.0-beta3\net40\IEDriverServer.exe"

    [Reflection.Assembly]::LoadFrom("C:\selenium-dotnet-3.0.0-beta3\net40\WebDriver.dll")
    $url = "http://malias.ml/"
    $ie = New-Object OpenQA.Selenium.IE.InternetExplorerDriver
    $ie.Navigate().GoToUrl($url)
    $frame = $ie.FindElementByClassName("tblock_810670")
    $ie.SwitchTo().Frame($frame)
    $link = $ie.FindElementsByTagName("a") | Where {$_.Text} | Get-Random
    $link.Click()
    Start-Sleep -Sec 1
    $link.Click()
    $ie.Quit()

    12 октября 2016 г. 13:12
    Отвечающий
  • Ах,точно! Selenium же есть

    Чтото кучу ошибок получил..

    Исключение при вызове "LoadFrom" с "1" аргументами: "Не удалось загрузить файл или сборку "file:///C:\selenium-dotnet-3.0.0-beta3\net40\WebDriver.dll" либо одну из их зависимостей. Операция 
    не поддерживается. (Исключение из HRESULT: 0x80131515)"
    строка:1 знак:1
    + [Reflection.Assembly]::LoadFrom("C:\selenium-dotnet-3.0.0-beta3\net40 ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FileLoadException
     
    New-Object : Не удается найти тип [OpenQA.Selenium.IE.InternetExplorerDriver]: убедитесь в том, что сборка, содержащая этот тип, загружена.
    строка:3 знак:7
    + $ie = New-Object OpenQA.Selenium.IE.InternetExplorerDriver
    +       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
        + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand
     
    Объект COM, который был отделен от своего базового RCW, использоваться не может.
    строка:4 знак:1
    + $ie.Navigate().GoToUrl($url)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], InvalidComObjectException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.InvalidComObjectException
     
    Объект COM, который был отделен от своего базового RCW, использоваться не может.
    строка:5 знак:1
    + $frame = $ie.FindElementByClassName("tblock_810670")
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], InvalidComObjectException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.InvalidComObjectException
     
    Объект COM, который был отделен от своего базового RCW, использоваться не может.
    строка:6 знак:1
    + $ie.SwitchTo().Frame($frame)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], InvalidComObjectException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.InvalidComObjectException
     
    Объект COM, который был отделен от своего базового RCW, использоваться не может.
    строка:7 знак:1
    + $link = $ie.FindElementsByTagName("a") | Where {$_.Text} | Get-Random
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], InvalidComObjectException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.InvalidComObjectException
     
    Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Click".
    строка:8 знак:1
    + $link.Click()
    + ~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
     
    Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Click".
    строка:10 знак:1
    + $link.Click()
    + ~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
     
    Объект COM, который был отделен от своего базового RCW, использоваться не может.
    строка:11 знак:1
    + $ie.Quit()
    + ~~~~~~~~~~
        + CategoryInfo          : OperationStopped: (:) [], InvalidComObjectException
        + FullyQualifiedErrorId : System.Runtime.InteropServices.InvalidComObjectException

    12 октября 2016 г. 13:42
  • Для всех архивов сделать - https://blogs.msdn.microsoft.com/delay/p/unblockingdownloadedfile/ и проверить, что есть .Net 4+
    12 октября 2016 г. 13:44
    Отвечающий
  • Не сработало,сыпится..

    [Reflection.Assembly]::LoadFrom("C:\selenium-dotnet-3.0.0-beta3\net40\WebDriver.dll")
    $url = "http://malias.ml/"
    $ie = New-Object OpenQA.Selenium.IE.InternetExplorerDriver
    $ie.Navigate().GoToUrl($url)
    $frame = $ie.FindElementByClassName("teasernet_blockid = 810670")
    $ie.SwitchTo().Frame($frame)
    $link = $ie.FindElementsByTagName("a") | Where {$_.Text} | Get-Random
    $link.Click()
    Start-Sleep -Sec 1
    $link.Click()
    $ie.Quit()
    
    GAC    Version        Location                                                                                                       
    ---    -------        --------                                                                                                       
    False  v4.0.30319     C:\selenium-dotnet-3.0.0-beta3\net40\WebDriver.dll                                                             
    Исключение при вызове "FindElementByClassName" с "1" аргументами: "Compound class names not permitted"
    строка:5 знак:1
    + $frame = $ie.FindElementByClassName("teasernet_blockid = 810670")
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : InvalidSelectorException
     
    Исключение при вызове "Frame" с "1" аргументами: "Unable to find elements on closed window"
    строка:6 знак:1
    + $ie.SwitchTo().Frame($frame)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : NoSuchWindowException
     
    Исключение при вызове "FindElementsByTagName" с "1" аргументами: "Unable to find elements on closed window"
    строка:7 знак:1
    + $link = $ie.FindElementsByTagName("a") | Where {$_.Text} | Get-Random
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : NoSuchWindowException
     
    Невозможно вызвать метод для выражения со значением NULL.
    строка:8 знак:1
    + $link.Click()
    + ~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull
     
    Невозможно вызвать метод для выражения со значением NULL.
    строка:10 знак:1
    + $link.Click()
    + ~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull


    12 октября 2016 г. 18:46
  • Запускается на Powershell 5 (ISE), Win10, NetFW 4+
    • Изменено [technoir] 12 октября 2016 г. 18:49
    12 октября 2016 г. 18:48
  • Я же привел, что элемент ("tblock_810670"), вы же зачем то используете ("teasernet_blockid = 810670"). 
    13 октября 2016 г. 5:48
    Отвечающий
  • Это я просто различные варианты пробовал.

    Но с ("tblock_810670") тоже не работает. Не находит его,почему то.

    13 октября 2016 г. 5:58
  • Скрин с выполнением в консоли PowerShell,а не в скрипте:

    [Reflection.Assembly]::LoadFrom("C:\selenium-dotnet-3.0.0-beta3\net40\WebDriver.dll")
    $url = "http://malias.ml/"
    $ie = New-Object OpenQA.Selenium.IE.InternetExplorerDriver
    $ie.Navigate().GoToUrl($url)
    $frame = $ie.FindElementByClassName("tblock_810670")

    13 октября 2016 г. 6:34
    Отвечающий
  • Пошагово выполнил в консоли

    Та же самая ошибка

    Исключение при вызове "FindElementByClassName" с "1" аргументами: "Unable to find element on closed window"
    строка:1 знак:1
    + $frame = $ie.FindElementByClassName("tblock_810670")
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : NoSuchWindowException


    13 октября 2016 г. 7:03
  • Открывается страница и ошибка.
    13 октября 2016 г. 7:03
  • Открывается страница и ошибка.
    Скрин команд выше, а не копирование.
    13 октября 2016 г. 7:05
    Отвечающий
  • В IE(не в EDGE) страница запускается? 

    Для всех зон в IE включен Protected Mode?

    Для теста добавить сайт в Tools > Options > Security Tab > Trusted Site.

    Проверить исключение в firewall для iedriverserver.exe.

    Проверить в chrome ,скачать драйвер - https://sites.google.com/a/chromium.org/chromedriver/downloads

    $ie = New-Object OpenQA.Selenium.Chrome.ChromeDriver

    • Помечено в качестве ответа [technoir] 13 октября 2016 г. 8:02
    13 октября 2016 г. 7:44
    Отвечающий
  • С Хромом все заработало!! Спасибо! Успехов!!
    13 октября 2016 г. 8:02