ROBOBROWSER: автоматизация онлайн-форм, отправка форм из выпадающих списков выбора - PullRequest
1 голос
/ 30 января 2020

Я вхожу в RoboBrowser, и я следовал этой ссылке учебника, чтобы сделать это:

http://theautomatic.net/2017/09/19/robobrowser-automating-online-forms/

Учебник связывает этот сайт, чтобы очистить:

https://www.wunderground.com/history

Но когда руководство было написано, оно было написано 19 сентября 2019 года, и с тех пор сайт изменился.

Это то, что сайт был раньше:

https://web.archive.org/web/20170919080607/https: // www.wunderground.com/history/

Оригинальный рабочий код:

 '''Create RoboBrowser object
       This will act similar to a typical web browser'''
    browser = RoboBrowser(history=True)

    '''Navigate browser to Wunderground's historical weather page'''
    browser.open('https://www.wunderground.com/history')

    '''Find the form to input zip code and date'''
    forms = browser.get_forms()

    form = forms[1]

    '''Enter inputs into form'''
    form['code'] = code
    form['month'] = month
    form['day'] = day
    form['year'] = year

    '''Submit form'''
    browser.submit_form(form)

    '''Scrape html of page following form submission'''
    html = str(browser.parsed)

    '''Use pandas to get primary table on page'''
    data = pd.read_html(html)[0]

Это больше не работает, поскольку внутри имени больше не «код», а «запрос»

Что ж, я смог изменить часть кода на это заставить его работать:

br = RoboBrowser(history=True)

br.open('https://www.wunderground.com/history')

#forms = br.get_forms()
forms = br.get_forms(id='historyForm')

form = forms[0]

form['query'] = 'Lakey Forest, IL'

Но остальные поля, необходимые для заполнения, теперь находятся за пределами формы и являются частью раскрывающихся списков:

enter image description here

И что я пытался сделать, чтобы поместить данные в эти поля, используя select:

forms2 = br.select(selector='date-selector', id='dateSelect')

Но это не работает, и я получаю либо 500 ответов, либо индекс вне диапазона.

Как мне go заполнить месяц, день и год, а затем отправить это?

Отредактируйте вот часть исходного кода для месяцев на сайте:

<select _ngcontent-app-root-c4="" class="ng-pristine ng-valid ng-star-inserted ng-touched">
<option _ngcontent-app-root-c4="" value="1">January</option>
<option _ngcontent-app-root-c4="" value="2">February</option>
<option _ngcontent-app-root-c4="" value="3">March</option>
<option _ngcontent-app-root-c4="" value="4">April</option>
<option _ngcontent-app-root-c4="" value="5">May</option>
<option _ngcontent-app-root-c4="" value="6">June</option>
<option _ngcontent-app-root-c4="" value="7">July</option>
<option _ngcontent-app-root-c4="" value="8">August</option>
<option _ngcontent-app-root-c4="" value="9">September</option>
<option _ngcontent-app-root-c4="" value="10">October</option>
<option _ngcontent-app-root-c4="" value="11">November</option>
<option _ngcontent-app-root-c4="" value="12">December</option>
</select>
...