Заполните значения формы на веб-странице с помощью скрипта Python (не тестирование) - PullRequest
30 голосов
/ 12 октября 2009

Мне нужно заполнить значения формы на целевой странице, а затем нажать кнопку через Python. Я смотрел на Selenium и Windmill, но это тестовые фреймворки - я не тестирую. Я пытаюсь войти на сторонний веб-сайт программно, затем загрузить и проанализировать файл, который нам нужно вставить в нашу базу данных. Проблема со средами тестирования заключается в том, что они запускают экземпляры браузеров; Мне просто нужен сценарий, который я могу запланировать запускать ежедневно для получения нужной мне страницы. Есть ли способ сделать это?

Ответы [ 4 ]

26 голосов
/ 12 октября 2009

Вы ищете Механизация

Форма отправки образца:

import re
from mechanize import Browser

br = Browser()
br.open("http://www.example.com/")
br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm (from ClientForm).
br["cheeses"] = ["mozzarella", "caerphilly"]  # (the method here is __setitem__)
response = br.submit()  # submit current form
16 голосов
/ 29 августа 2013

Посмотрите на этот пример, в котором используется Механизация : это даст основную идею:

#!/usr/bin/python
import re 
from mechanize import Browser
br = Browser()

# Ignore robots.txt
br.set_handle_robots( False )
# Google demands a user-agent that isn't a robot
br.addheaders = [('User-agent', 'Firefox')]

# Retrieve the Google home page, saving the response
br.open( "http://google.com" )

# Select the search box and search for 'foo'
br.select_form( 'f' )
br.form[ 'q' ] = 'foo'

# Get the search results
br.submit()

# Find the link to foofighters.com; why did we run a search?
resp = None
for link in br.links():
    siteMatch = re.compile( 'www.foofighters.com' ).search( link.url )
    if siteMatch:
        resp = br.follow_link( link )
        break

# Print the site
content = resp.get_data()
print content
6 голосов
/ 12 октября 2009

Вы можете использовать стандартную библиотеку urllib, чтобы сделать это следующим образом:

import urllib

urllib.urlretrieve("http://www.google.com/", "somefile.html", lambda x,y,z:0, urllib.urlencode({"username": "xxx", "password": "pass"}))
2 голосов
/ 16 апреля 2011

Пример Механизации, как предложено, похоже, работает. В полях ввода, где вы должны ввести текст, используйте что-то вроде:

br["kw"] = "rowling"  # (the method here is __setitem__)

Если какой-либо контент создается после отправки формы, как в поисковой системе, вы получаете его через:

print response.read()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...