Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
Есть сайт, к примеру на странице [url=]https://prozorro.gov.ua/tender/search/?query=ВП ЮУАЕС ДП НАЕК "Енергоатом"[/url] есть внизу кнопка "показать больше результатов".
Внимание, вопрос!
Как программно нажать на эту кнопку (c# или vb.net).
Или, если задать вопрос по другому. Чтобы распастить данные, как отобразить все данные по всем страницам.
Спасибо, за помощь.
14 авг 17, 10:32    [20721040]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
maxim111
Member

Откуда:
Сообщений: 36
Bujhm_C,

Я в таких случаях использую selenium
14 авг 17, 11:58    [20721351]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
Selenium? Вообще не знаком.
А более изящный способ, стандартными компонентами Studio как победить?
Есть варианты?
14 авг 17, 13:30    [20721752]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
maxim111
Member

Откуда:
Сообщений: 36
Bujhm_C,

Можно webbrowser использовать, это из стандартных. Приведите пример как пробуете вы. Что не получается?
14 авг 17, 13:34    [20721768]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
Вот часть кода, если это поможет для разбирательства

Private Function AcquireHTML(address As String) As String
        Dim request As HttpWebRequest
        Dim response As HttpWebResponse = Nothing
        Dim reader As StreamReader
        Dim sbSource As StringBuilder

        Try
            ' Create and initialize the web request
            request = TryCast(System.Net.WebRequest.Create(address), HttpWebRequest)
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)"
            request.KeepAlive = False
            request.Timeout = 5 * 1000
            ' Get response
            response = TryCast(request.GetResponse(), HttpWebResponse)
            If request.HaveResponse = True AndAlso response IsNot Nothing Then
                ' Get the response stream
                reader = New StreamReader(response.GetResponseStream())
                ' Read it into a StringBuilder
                sbSource = New StringBuilder(reader.ReadToEnd())
                response.Close()
                '  
                ' Console application output
                Return sbSource.ToString()
            Else
                Return ""
            End If
            reader.Close()

        Catch ex As Exception

            response.Close()
            Return ""
        End Try
    End Function


' Затем я извлекаю данные с помощью функций

 Private Function GetTitle(strIn As String) As String

        Dim collection As MatchCollection = Regex.Matches(strIn, "<title>([^<]*)</title>", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
        For Each m As Match In collection
            If m.Value.IndexOf("<title>") >= 0 Then
                Dim intStart As Integer = m.Value.IndexOf("<title>")
                Dim intEnd As Integer = m.Value.LastIndexOf("</title>")
                Return m.Value.Substring(intStart + 7, intEnd - intStart - 7)
            End If
        Next
        Return ""
    End Function


Но все это касается текущей страницы, чтобы "стянуть" данные со следующей страницы, необходимо нажать эту злополучную кнопку "показать больше данных". Вот тут я и застрял. Задача еще усугубляется тем, что нажать на кнопку нужно столько раз, чтобы достичь конца всех страниц. Есть предложения?
14 авг 17, 14:07    [20721863]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
netfrog
Member

Откуда:
Сообщений: 666
Может попросить нужные данные у админов этого сайта? Вдруг дадут.
14 авг 17, 14:31    [20721969]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
Я не лишен чувства юмора, но тут ветка другая.
А предложение дельное. Можно и бабок попросить.
14 авг 17, 14:43    [20722027]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Juk2
Member

Откуда:
Сообщений: 5298
Bujhm_C
Я не лишен чувства юмора, но тут ветка другая.
А предложение дельное. Можно и бабок попросить.


тебеж написали
про веббравзер
14 авг 17, 17:59    [20722948]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2263
кнопка которая раскрывает список вызывает JS метод, который выполняет "дозагрузку".
Через HttpWebRequest\WebClient сделать это невозможно, так как они не умеет выполнять JS скипты, это дело браузеров.
Если существует такая кнопка, значит существует API через который эти дополнительные данные загружаются.
Обычно это какой то REST или SOAP сервис, к которому обращается скрипт.
Каким образом он это делает и что в результате получает, можно посмотреть в любом браузере через панель разработчика, если будет ссылка на сайт, с которого вы берёте данные, можно будет сказать как это сделать.

Тут еще остро стоит вопрос о том, на сколько правомерны ваши действия. Ведь та информация которые вы парсите вам не пренадлежит, а автор возможно не давал вам согласие на её использование.
14 авг 17, 18:23    [20723028]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 141260
Ботов для игр лучше писать на autofit
14 авг 17, 18:43    [20723075]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Изопропил
Member

Откуда:
Сообщений: 30305
Cat2
Ботов для игр лучше писать на autofit

а кнопки давить посредством PhantomJS
14 авг 17, 18:47    [20723084]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
автор
Тут еще остро стоит вопрос о том, на сколько правомерны ваши действия. Ведь та информация которые вы парсите вам не пренадлежит, а автор возможно не давал вам согласие на её использование.

Тут пожалуйста по подробнее.
А какую статью закона я нарушаю парся инфу открытого доступа. Я не взламываю пароли, не вношу изменения в БД и т.д. Так, что противозаконность моих действий очень даже не очевидна.
15 авг 17, 07:10    [20723771]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 141260
Bujhm_C
на странице https://prozorro.gov.ua/tender/search/?query=ВП ЮУАЕС ДП НАЕК "Енергоатом"[/url]

Сходил по ссылке. Там есть API для разработчиков, но все равно надо давить на кнопку?
15 авг 17, 08:02    [20723807]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
автор
но все равно надо давить на кнопку?

Да нет же. Мне совсем не надо на нее давить (на кнопку). Мне нужно развернуть все страницы, чтобы распастить по тегам!
Если бы в командной строке был адрес следующей станицы, я бы эту задачу решил, пробежавшись циклом.
15 авг 17, 09:46    [20724041]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
автор
Там есть API для разработчиков

Если я правильно понял, рыть нужно здесь...
-просмотр кода HTML страницы.

516
   <button class="show-more" data-start="10">Показати більше результатів 1120 з 1 773</button>
    
									</div>
			</div>
		</div>


Вопрос прямой- как открыть станицы с 1 по 773?
15 авг 17, 09:59    [20724101]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
автор
если будет ссылка на сайт, с которого вы берёте данные, можно будет сказать как это сделать.

Так вот же она
[url=]https://prozorro.gov.ua/tender/search/?query=ВП ЮУАЕС ДП НАЕК "Енергоатом[/url]
15 авг 17, 10:06    [20724119]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
В начале поста правильная ссылка
15 авг 17, 10:10    [20724140]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Dima T
Member

Откуда:
Сообщений: 11301
Bujhm_C
автор
Там есть API для разработчиков

Если я правильно понял, рыть нужно здесь...
-просмотр кода HTML страницы.

516
   <button class="show-more" data-start="10">Показати більше результатів 1120 з 1 773</button>
    
									</div>
			</div>
		</div>


Вопрос прямой- как открыть станицы с 1 по 773?

Неправильно ты понял. API делают как-раз для того чтобы HTML не парсить, т.е. просто посылаешь запрос нужной инфы и получаешь ответ в готовом виде, без всякого излишества в виде форматированного HTML и прочей навигации.

У меня тот сайт не открывается: "500 Server Error" пишет. Читай что там разработчики API предлагают.
15 авг 17, 10:44    [20724286]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 27
автор
У меня тот сайт не открывается: "500 Server Error" пишет. Читай что там разработчики API предлагают.


Вот рабочая ссылка:

[url=]https://prozorro.gov.ua/tender/search/?query=ВП ЮУАЕС ДП НАЕК "Енергоатом"[/url]
15 авг 17, 11:52    [20724597]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24665
По сабжу. Прекрасно себе кнопочки нажиматся на VBScript и JScript (не путать с javascrpt).
тынц.
15 авг 17, 19:35    [20726375]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 141260
Dima T
Неправильно ты понял. API делают как-раз для того чтобы HTML не парсить, т.е. просто посылаешь запрос нужной инфы и получаешь ответ в готовом виде, без всякого излишества в виде форматированного HTML и прочей навигации.

+1

http://api-docs.openprocurement.org/uk_UA/latest/tutorial.html#tutorial
15 авг 17, 20:22    [20726457]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Pu4koff
Member

Откуда:
Сообщений: 266
Так вот же описание API: http://api-docs.openprocurement.org/uk_UA/latest/
там только на птичьем языке, непонятно есть нужные функции или там API для размещения тендеров, а не их поиска.
15 авг 17, 20:23    [20726460]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Pu4koff
Member

Откуда:
Сообщений: 266
Если прямо на кнопку нужно жать, то там по урлу https://prozorro.gov.ua/tender/form/search отправляется Post запрос:
query%5B%5D=query%3D%D0%92%D0%9F+%D0%AE%D0%A3%D0%90%D0%95%D0%A1+%D0%94%D0%9F+%D0%9D%D0%90%D0%95%D0%9A+%22%D0%95%D0%BD%D0%B5%D1%80%D0%B3%D0%BE%D0%B0%D1%82%D0%BE%D0%BC%22&start=10

волнует собственно параметр start. Это что-то вроде: начинать с 10 элемента. Следующая кнопка будет с start=20.
нужно смотреть там может куки еще важны какие или реферал или еще к чему привязываются.
Возвращается json вида:
{
"search_type":"tender",
"total":1777, // вероятно общее число тендеров по запросу
"html": кусок html кода, который просто вставляется на страницу,
"highlight":["ВП ЮУАЕС ДП НАЕК \"Енергоатом\""]}

итого можно просто слать post-запросы и каждую страницу отдельно парсить или же собирать одну огромную страницу и её разбирать.
15 авг 17, 20:34    [20726478]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 141260
Pu4koff
Так вот же описание API: http://api-docs.openprocurement.org/uk_UA/latest/
там только на птичьем языке, непонятно есть нужные функции или там API для размещения тендеров, а не их поиска.

Мову не врозумляшь? Так там есть по английски вроде
15 авг 17, 21:39    [20726598]     Ответить | Цитировать Сообщить модератору
 Re: Программно нажать на кнопку web страницы  [new]
Pu4koff
Member

Откуда:
Сообщений: 266
Cat2
Pu4koff
Так вот же описание API: http://api-docs.openprocurement.org/uk_UA/latest/
там только на птичьем языке, непонятно есть нужные функции или там API для размещения тендеров, а не их поиска.

Мову не врозумляшь? Так там есть по английски вроде

Чего-то изначально на англицком API не нашел (когда на главной странице переключил на английский, то куда-то убежали ссылки). Вручную урл поменял, оказывается на буржуйском тоже есть: http://api-docs.openprocurement.org/en/
только там про поиск не нашёл. только перебор всех тендеров вроде есть.
16 авг 17, 07:07    [20726929]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить