Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 121 След.
Парсинг сайтов через vba. Без доп. ПО, установки драйверов, Selenium и прочего., Необходим способ парсинга сайтов.
 
Цитата
форма graphql. Сайты есть на asp. Net ... чтоб пройти csrf, нужен token
для работы с такими сайтами браузер не нужен
там всё отлично делается без использования браузера

Цитата
нашел, что его генерирует js код
сколько попадалось сайтов на этом движке - везде токен из кода страницы брался вроде (ну точно никакой js выполнять не нужно было)
может, что-то не то нашли?
PQ не видит всего кода сайта, При парсинге старницы PQ видит только часть кода
 
Цитата
Где об этом подробнее узнать?
Нигде
Только если потратить много дней на изготовление парсеров для сайта wildberries, чем я занимаюсь на протяжении последних 5 лет

Там много всяких нюансов, — например, настроенное выше решение через время перестанет работать, так как формировать ссылку надо по данным отдельного запроса,
— там меняются параметры dest=-1075831,-72194,-287507,-283645, и иногда при при изменении этого параметра сайт не выдает результат.
То есть, по хорошему, надо сначала выполнять пост-запрос на адрес https://www.wildberries.ru/webapi/user/get-xinfo-v2
получая оттуда данные вида {"xinfo":"spp=0&regions=80,64,83,4,38,33,70,82,69,68,86,30,40,48,1,22,66,31&pricemarginCoeff=1.0®=0&appType=1&emp=0&locale=ru&lang=ru&curr=rub&couponsGe­o=2,12,7,3,6,13,21&dest=-1113276,-79379,-1469659,-1124099","shard":0}
и уже на основании этих данных формировать корректные ссылки для последующих запросов.
PQ не видит всего кода сайта, При парсинге старницы PQ видит только часть кода
 
Скидка покупателя (SPP) задаётся в ссылке
&reg=0& - неавторизованный пользователь
&reg=1&spp=25& - авторизованный пользователь со скидкой до 25%
PQ не видит всего кода сайта, При парсинге старницы PQ видит только часть кода
 
Видеоинструкция неактуальна уже около года
(когда на странице товара исчезли данные, и стали подгружаться скриптами)
Кроме того, API сайта меняется (за последний год минимум 3 изменения было), так что если вы сейчас всё это как-то настроите (там надо несколько доп запросов выполнять предварительно), то через какое-то время это перестанет работать частично или полностью, так как в последние 3 года ВБ активно переделывает свой сайт.
Парсинг сайтов через vba. Без доп. ПО, установки драйверов, Selenium и прочего., Необходим способ парсинга сайтов.
 
Я правильно понял, что нужно одновременно:
- использовать современный браузер (не IE)
- не устанавливать никакого ПО, и не вносить изменений в реестр
- использовать VBA
?

Если так, — то это возможно, но достаточно трудоёмко в плане кода.
Ведь что нужно для парсинга, — прежде всего получить исходный код страницы из браузера.
Вручную вы это можете сделать (нажав Ctrl + U, Ctrl + A, Ctrl + C) — значит, то же самое можно сделать и программно.
Открыть страницу в нужном браузере - одна строка кода.
А далее — WinAPI вам в помощь (найти нужное окно, послать сочетания клавиш, считать содержимое буфера обмена)
Изменено: Игорь - 14.11.2022 02:21:34
Microsoft XML v3.0 в v6.0
 
Из опыта:
1) используем только Microsoft XML v3.0 (6-й версии нет на некоторых компьютерах) — вряд ли вам нужно что-то специфичное, появившееся только в 6 версии библиотеки
2) используем раннее связывание с версией 3.0 (она есть на всех компах), или позднее связывание, если используется 6-я версия.
Несколько гиперссылок в одной ячейке
 
Можно
В ячейку вставляем несколько маленьких фигур (Вставка - Фигуры), и каждой из них назначаем отдельную гиперссылку
А для текста ячейки такое сделать не получится
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
Если нужно единоразово перевести столбец с текстом,
просто копируем диапазон ячеек (вертикальный, 1 столбец и много строк), и вставляем в гугл транслейт.
Результат перевода тоже копируем и вставляем в столбец справа (он корректно разнесется по ячейкам, в большинстве случаев)

Макрос можно написать (большинство выложенных в интернетах макросов - старые, сейчас нужно изменения вносить),
но там есть ограничения (у гугла и яндекса АПИ платный, беплатно можно вроде только до миллиона символов перевести)
То есть решение сильно зависит от объема переводимых данных, и от того, разовая эта задача, или же регулярная.
Открыть csv в UTF-8 и сохранение в UTF-8
 
Самый простой вариант - использовать для этой задачи бесплатный офисный пакет типа OpenOffice
(где, в отличие от Excel, вроде бы кодировка utf-8 используется по умолчанию)
Как при помощи vba спарсить (получить) цену с Леруа Мерлен
 
> можно с помощью vba парсить на современном браузере?

да, можно. через selenium
я уже писал, - надо сначала запустить браузер из командной строки (Пуск - Выполнить, а если макросом - то через  CreateObject("wscript.shell").Run cmd$ )
chrome.exe "https://leroymerlin.ru/" --remote-debugging-port=9999
и подождать 5 сек - страница загрузится, и проверка на браузер выполнится успешно.
И уже ПОСЛЕ ЭТОГО подключаться селениумом к запущенному браузеру, с параметром .DebuggerAddress = "localhost:9999"
И тогда всё получится (я проверял конкретно на этом сайте) - защита не сработает (QRATOR видит, если браузер запущен selenium-ом)
После этого уже можно грузить другие страницы этого сайта
Изменено: Игорь - 24.09.2022 20:36:54
Как при помощи vba спарсить (получить) цену с Леруа Мерлен
 
Собственно, в загружаемой по этой ссылке странице есть все необходимые данные..
Т.е. вся сложность - это загрузить страницу товара, а данные с неё взять уже несложно.
Только страницу надо грузить современным браузером (не IE), причём подключаться к браузеру уже после загрузки одной из страниц сайта (иначе срабатывает защита QRATOR)
Взаимодействие с всплывающими окнами в браузере через Selenium
 
Ищите класс Alert
Там есть функционал для работы со всплывающими окнами
https://www.selenium.dev/documentation/webdriver/interactions/alerts/

Цитата
разобрался как авторизоваться с помощью Selenium через webelements и методы FindelementsBy
Авторизоваться можно один раз вручную (но нужно подгружать профиль пользователя - 1 доп строка кода)
И потом селениум будет открывать страницу уже после авторизации
Изменено: Игорь - 21.09.2022 12:09:39
Позднее связывание - ошибка variable uses an automation type not supported in visual basic
 
Владимир, спасибо
Я уже это всё испробовал, - простые варианты не помогали



Причём все остальные методы работают
Sub AddCookie(CK As Cookie) - создаёт объект
Function GetCookieNamed(Name As String) As Cookie - возвращает объект

Т.е. один объект когда возвращается — всё ОК, но если это МАССИВ объектов, как в функции Function AllCookies() As Cookie(), — то VBA не справляется.

С ранним связыванием не вариант: устанавливать Selenium будут максимум 10-15% от пользователей надстройки
(не всем нужен этот функционал)
Так что у большинства этой DLL на компе просто не будет

PS: Там и другие функции из этой DLL, возвращающие массив объектов, дают такую же проблему,
так что интересно узнать, есть ли решение без раннего связывания
Изменено: Игорь - 21.09.2022 21:55:54
Позднее связывание - ошибка variable uses an automation type not supported in visual basic
 
Так чтобы эта функция работала, мне надо прописать имя класса
И при открытии файла пользователем, выскочит ошибка компиляции

PS: нашел обходное решение, — к счастью, в браузере можно выполнять javascript, и через него легко получить cookies
так что можно обойтись без этой проблемной функции
Тему можно считать закрытой.
Позднее связывание - ошибка variable uses an automation type not supported in visual basic
 
Присвоение Set WD = SWD тут роли не играет, - там корректно созданный объект с подключением к браузеру.
И у этого объекта работают все десятки методов, кроме одного
Эта же проблемная функция возвращает массив объектов пользовательского типа данных, типа такого:
Код
Type Cookie
  Domain As String
  Value As Single
  Expiry As Date
End Type

И вот почему-то объект такого типа доступен только при раннем связывании.
И вопрос в том, как при помощи API функции CopyMemory попробовать скопировать содержимое этого массива объектов в другой массив, который VBA сможет обработать.

Т.е. в переменную A данные попадают и при позднем связывании, просто VBA эти данные прочитать не может
Изменено: Игорь - 20.09.2022 20:26:23
Позднее связывание - ошибка variable uses an automation type not supported in visual basic
 
Всем привет
Из VBA обращаюсь к функциям из DLL SeleniumBasic, и всё отлично работает, кроме одного метода.
Точнее, всё отлично работает при использовании раннего связывания, но при позднем связывании VBA отказывается видеть содержимое массива
Прилагаю скриншот, где видно тип объектов (один - где все работает - с ранним связыванием, второй - с поздним)



При позднем связывании вылетают 2 весьма специфические ошибки:
Run-time error 458: Variable uses an Automation Type not supported in Visual Basic
Run-time error 10: This array is fixed or temporarily locked

Библиотеку (DLL) сделал китаец, с которым связи нет, и ждать новых версий не приходится
Единственная надежда - обойти как-то эту ошибку (это ошибка его библиотеки, а не моего кода), но как именно - не знаю
В интернетах пишут, что есть шанс с использованием функции CopyMemory, но я не понимаю, как её применить
Может кто подскажет?

PS: мне совсем не вариант использовать раннее связывание
Данные из URL - браузер не поддерживается.
 
Тогда придется загружать данные макросом
Компонент WinHTTPRequest

ну а курсы можно запросить и через веб-запрос в Excel (но по другой ссылке)
https://api.tinkoff.ru/v1/currency_rates?from=USD&to=RUB
но там данные в формате JSON
Данные из URL - браузер не поддерживается.
 
Здравствуйте.
Там не факт что заменой user agent что-то решится
Проверка браузера обычно выполняется скриптами, и этот скрипт в IE (ну и в Excel) не отработает
Что за сайт?
VBA excel парсер highchart графика, Парсер на VBA (excel, макрос) highchart графика
 
Готовое решение будет стоить 4500 руб
Скриншот результата во вложении
Протестировать можно здесь:
https://excelvba.ru/programmes/Parser/samples/yield.chinabond.com.cn
Изменено: Игорь - 16.09.2022 20:50:48
PQ. Web.Contents отображает не весь код страницы
 
Вам нужно прогружать ссылки вида https://doct.ru/price/?direction=406
И тогда там будут данные (эти ссылки прогружает браузер при раскрытии списков)
Изменено: Игорь - 08.09.2022 04:57:48
VBA. Запрос GET. Определение браузера, VBA. Запрос GET. Определение браузера
 
ну так замените эту строку
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"
на что-то типа этого:
XMLHTTP.setRequestHeader "User-Agent", "Chrome/103.0.0.0 Safari/537.36"
макрос выдает ошибку Compile error 64bit
 
После каждого Declare надо добавить слово PtrSafe
тогда заработает:
Код
Declare PtrSafe Function GetTickCount& Lib "kernel32" ()
Declare PtrSafe Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Парсинг edadil.ru, Выгрузка цен с edadil.ru
 
Написал в личку.

PS: заказ свободен, не получилось сделать
Изменено: Игорь - 22.07.2022 21:21:30
VBA. Решить проблему авторизации на сайте.
 
Макрос может работать с сайтом без использования браузера
(но код надо полностью переписывать)
Но с кодом мы вам тут не поможем, ибо нет доступа к сайту
Пример кода есть здесь:
https://excelvba.ru/code/YandexMarketAuthentication
Получить записи из "Журналы Windows" с помощью VBA
 
Да, можно
Например, через WMI:
https://excelvba.ru/code/NTLogEvent
Шаблон автозаполнения документа
 
Да, возможно
Получение данных вэб-запросом PQ, Двойная авторизация
 
Не видя реального адреса сайта (не имея возможности протестировать), вряд ли возможно помочь в вашем случае.
Парсинг HTML кода страницы, ошибка 401 not authorized
 
Откройте эту саму страницу в браузере Internet Explorer (именно в нём, а не в Edge)
Наверняка там нужно будет авторизоваться, — сделайте это
А потом используйте функцию от nilske (только без строки .SetRequestHeader "Accept-Encoding", "deflate")
Там, в отличие от вашего кода с WinHttpRequest, используется MSXML2.XMLHTTP, который подхватит авторизацию из браузера Internet Explorer
UserForm для умной таблицы, Изменения данных в умной таблице по условиям
 
Цитата
от 1500 р. до 3000 р. в зависимости от качества работы
а кто будет это качество оценивать? и по каким критериям?

Цитата
нужна форма которую можно адаптировать под нужную умную таблицу
прямо универсальное решение, которое будет корректно работать с произвольным количеством столбцов в произвольном файле Excel?
тогда цену надо было не на 3 умножать, а на 10 хотя бы
Не открывается определенная гиперссылка., Не открывается гиперссылка на сайт Леруа Мерлен
 
На этом сайте срабатывает защита от DDoS (QRATOR), когда сначала должен отработать скрипт в браузере, и только после проверки браузера будет открыта страница
Excel прогружает ссылку перед открытием (это лишнее, но так придумал Майкрософт)
Прогрузка идет в компоненте типа браузера IE, в котором этот скрипт не срабатывает (можете открыть эту ссылку в IE, и убедиться)
А если эксель видит, что страница не прогрузилась (код ответа сервера не 200 OK, а ошибка), то он выводит сообщение типа того что вы видите.
Короче, проблема нерешаемая (без макросов)
Макрос может перехватывать щелчок по ссылке, и отправлять ссылку напрямую в браузер по-умолчанию
Макрос надо вставить в модуль листа:
Код
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
   CreateObject("wscript.shell").Run Target.Address
   MsgBox "Ссылка открылась"
End Sub
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 121 След.
Наверх