• Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

    @azarij
    хорошо, в хроме, нажмите правой мышкой на кнопке Найти в яндексе, выберите Inspect. в dev tools окне в правом верхнем углу выберите пункт меню Properties и раскройте первую же ветку дерева. Похоже на то, что вы видите через IE COM в powershell?
  • Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

    @azarij
    хорошо, давайте по пунктам.
    стабильность IE.
    если вы про странные ошибки при использовании $ie.document.getElementBy*(), то они, если не ошибаюсь, решаются так: $ie.document.IHTMLDocument3_getElementsBy*()
    IHTMLDocument3_getElementById
    IHTMLDocument3_getElementsByName
    IHTMLDocument3_getElementsByTagName
    что ещё со стабильностью?

    чтобы не зависеть от классов и привязок, которые меняются и ломают скрипты попробуйте, где это возможно, отказаться от скринскрейпинга и воспользуйтесь прямыми http GET/POST запросами на сервер через invoke-webrequest. это не всегда возможно ибо на многих сайтах некоторые вещи делаются через javascript, который invoke-webrequest не обрабатывает по определению. берете fiddler или те же dev tools в хроме и смотрите какие запросы и куда шлются при открытии страницы и при работе с нею. повторяете их в powershell. если нету хитрых javascript на сайте, то поведение браузера можно полностью имитировать в powershell, используя прямые http запросы.

    и dev tools и ie работают с DOM. и тот и другой видят один и тот же DOM страницы и одни и те же элементы и их свойства.
    дайте пример страницы, на которой вы не можете найти список свойств элемента в хром dev tools.

    вот тут можно посмотреть все атрибуты элемента DOM: https://www.w3schools.com/jsref/dom_obj_all.asp
  • Не инициализируется SAS. Причины?

    @azarij
    ну почему же. вот вам реальная история. у сигейта была партия дисков (ОЧЕНЬ большая партия), в которых они применили слишком густую смазку в механизме поворота штанги держателя головок (или она очень быстро теряла свои изначальные качества по вязкости, не помню точно). они работали, но без обновления прошивки летели абсолютно одинаково (это давно было, не помню точно как, но кажется так же - не проходили spin-up). а обновление прошивки всего-то и делало, что заставляло блок головок двигаться чаще - даже когда не шли запись/чтение - чтобы смазка тупо не успевала загустевать.

    вы б спросили у "родственника" что с дисками, ибо в игре против дохлых дисков всегда выигрывают дохлые диски.
    надеюсь только, что денег вы за них не платили...

    кстати, именно этому диску скоро 10 лет стукнет...
  • Не инициализируется SAS. Причины?

    @azarij
    эм... а вот эти большие буквы BAD... они как-то смущают... ;)
    не был ли тот "родственник", что оставил вам такое наследство большим шутником?
  • Не инициализируется SAS. Причины?

    @azarij
    если это делловские диски, то делловский контроллер их должен увидеть без проблем.
  • Не инициализируется SAS. Причины?

    @azarij
    а HBA чей и какая модель?
    наклейку бы от дисков посмотреть
  • Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

    @azarij
    можно ослом рулить через COM object напрямую, можно старичком watin воспользоваться. https://www.codeproject.com/Tips/658947/Watin-An-A...

    однако дело не в этом. каким бы образом вы ни управляли браузером, обычно, все эти атрибуты на элементах важны только во время написания/тестирования/правки скрипта. потом скрипт просто работает.
    так какова конечная цель? что за сценарии? что они будут делать? как часто меняться?
    почему нельзя выяснить все нужные атрибуты через dev tools, написать скрипт(ы), используя selenium и оставить их работать дальше?
  • Как удалить файл с помощью консоли в безопасном режиме?

    @azarij
    видите имя диска? system reserved? это не ваш диск C:.
    пробуйте буквы по алфавиту пока dir не выдаст структуру папок вашего диска C:.
  • Как удалить файл с помощью консоли в безопасном режиме?

    @azarij
    теперь cd windows или cd c:\windows
    если ничего не происходит или выдается ошибка попробуйте C: и enter.
  • Как удалить файл с помощью консоли в безопасном режиме?

    @azarij
    хорошо.
    как вы загрузились - с флэшки/cd или в родную ОС через F8?
    что будет если ввести C: и нажать enter? оно перейдет на диск C? если перейдет, потом cd windows например.
  • Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

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

    а какова конечная цель вашего скрипта? не все же атрибуты на каждом элементе перебирать...
    на селениуме свет клином не сошелся, в принципе. есть и другие automation frameworks.
  • Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

    @azarij
    а все атрибуты можно получить либо через ie либо через developer tools в браузере.
  • Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

    @azarij
    я не настоящий питонячий сварщик, но я подозреваю, что re это питонячий модуль для работы с регулярными выражениями. соответственно, re.findall(pattern, html) найдет все вхождения pattern в объекте/строке html.

    но я сомневаюсь, что понимание того, что они там пишут сильно поможет. вывод там один, селениум так не умеет как вам надо.
  • Сравнение объектов Powershell+Selenium+Chrome и Powershell+IE, почему такая огромная разница?

    @azarij
    а в питоне его тоже нет. они там свою функцию пишут и называют ее get_web_element_attribute_names.
  • Как запустить консольное приложение в powershell?

    @azarij
    Иван Иван Автор вопроса
    Ping привел для примера, нужно обработать вывод консольной утилиты для raid

    отвечайте в ветку плиз.
    ок, можно регулярками распарсить вывод. можете дать текстовый файл с выводом утилиты этой?
  • Как провильно передать CommandText?

    @azarij
    неа, закрывает он подключение моментально...
    без доступа к хосту я не смогу помочь, а у себя мускул ставить и лень и времени нет.
  • Как провильно передать CommandText?

    @azarij
    ок, а так?

    # Connection Variables
    $user = 'root'
    $pass = '123456'
    $database = 'curamed'
    $MySQLHost = 'localhost'
    $dir = 'C:\Temp\1'
    $dir2 = 'C:\Temp\2'

    function Connect-MySQL([string]$user,[string]$pass,[string]$MySQLHost,[string]$database) {
    # Load MySQL .NET Connector Objects
    [void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")

    # Open Connection
    $connStr = "server=" + $MySQLHost + ";port=3306;uid=" + $user + ";pwd=" + $pass + ";database="+$database+";Pooling=FALSE"
    $conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
    try {
    $conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
    $conn.Open()
    } catch [System.Management.Automation.PSArgumentException] {
    "Unable to connect to MySQL server, do you have the MySQL connector installed..?"
    $_
    Exit
    } catch {
    "Unable to connect to MySQL server..."
    $_.Exception.GetType().FullName
    $_.Exception.Message
    exit
    }
    "Connected to MySQL database $MySQLHost\$database"

    return $conn

    }

    function Disconnect-MySQL($conn) {
    $conn.Close()
    }

    function Execute-MySQLNonQuery($conn, [string]$query) {
    $command = $conn.CreateCommand() # Create command object
    $command.CommandText = $query # Load query into object
    $RowsInserted = $command.ExecuteNonQuery() # Execute command
    $command.Dispose() # Dispose of command object
    if ($RowsInserted) {
    return $RowInserted
    } else {
    return $false
    }
    }

    foreach ($i in ls -name $dir\*.csv)
    {
    Write-Host "$i"
    $file_content = Get-Content "$dir\$i";
    [System.IO.File]::WriteAllLines("$dir2\$i", $file_content);
    Remove-Item "$dir\$i"
    # So, to insert records into a table
    $query = "LOAD DATA LOCAL INFILE '$dir2\$i' INTO TABLE bga FIELDS ENCLOSED BY '`"' TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
    "Opening the connection to DB to send data from this file..."
    Connect-MySQL -user $user -pass $pass -mysqlhost localhost -database $database
    "QUERY:"
    $query
    "CONNECTION right after open():"
    $conn
    $Rows = Execute-MySQLNonQuery -conn $conn -query $query
    Write-Host $Rows " inserted into database"
    "CONNECTION after command was sent:"
    $conn
    }
    "Closing connection to DB"
    Disconnect-MySQL -conn $conn
  • Как провильно передать CommandText?

    @azarij
    понятно. оно открывает подключение к базе и тут же его закрывает зачем-то. так что когда вы пытаетесь слать команды - подключение уже закрыто... будем думать почему.
  • Как провильно передать CommandText?

    @azarij
    хорошо, синтаксических ошибок вроде больше нет.
    дайте полный вывод вот этого кода:

    # Connection Variables
    $user = 'root'
    $pass = '123456'
    $database = 'curamed'
    $MySQLHost = 'localhost'
    $dir = 'C:\Temp\1'
    $dir2 = 'C:\Temp\2'

    function Connect-MySQL([string]$user,[string]$pass,[string]$MySQLHost,[string]$database) {
    # Load MySQL .NET Connector Objects
    [void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")

    # Open Connection
    $connStr = "server=" + $MySQLHost + ";port=3306;uid=" + $user + ";pwd=" + $pass + ";database="+$database+";Pooling=FALSE"
    $conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
    try {
    $conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
    $conn.Open()
    } catch [System.Management.Automation.PSArgumentException] {
    "Unable to connect to MySQL server, do you have the MySQL connector installed..?"
    $_
    Exit
    } catch {
    "Unable to connect to MySQL server..."
    $_.Exception.GetType().FullName
    $_.Exception.Message
    exit
    }
    "Connected to MySQL database $MySQLHost\$database"

    return $conn

    }

    function Disconnect-MySQL($conn) {
    $conn.Close()
    }

    function Execute-MySQLNonQuery($conn, [string]$query) {
    $command = $conn.CreateCommand() # Create command object
    $command.CommandText = $query # Load query into object
    $RowsInserted = $command.ExecuteNonQuery() # Execute command
    $command.Dispose() # Dispose of command object
    if ($RowsInserted) {
    return $RowInserted
    } else {
    return $false
    }
    }

    Connect-MySQL -user $user -pass $pass -mysqlhost localhost -database $database

    foreach ($i in ls -name $dir\*.csv)
    {
    Write-Host "$i"
    $file_content = Get-Content "$dir\$i";
    [System.IO.File]::WriteAllLines("$dir2\$i", $file_content);
    Remove-Item "$dir\$i"
    # So, to insert records into a table
    $query = "LOAD DATA LOCAL INFILE '$dir2\$i' INTO TABLE bga FIELDS ENCLOSED BY '`"' TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
    "QUERY:"
    $query
    "CONNECTION:"
    $conn
    $Rows = Execute-MySQLNonQuery -conn $conn -query $query
    Write-Host $Rows " inserted into database"
    }