2013-02-25 4 views
3

У меня есть проблемы, нажав на эту кнопку, которая выглядит в HTML код, как это:Python: нажав кнопку

<form method="post"> 
<br> 
<input type="hidden" value="6" name="deletetree"> 
<input type="submit" value="Delete Tree" name="pushed"> 
</form> 

и URL, который должен быть сгенерирован, выглядит так: http://mysite.com/management.php?Category=2&id_user=19&deteletree=6&pushed=Delete+Tree

Update: Я попытался это, но он не работает:

form_data = urllib.urlencode({'Category' : '2', 'suid' : '19', 'deletetree' : '6', 'pushed' : 'Delete+Tree' }) 
urllib2.urlopen("management.php", form_data) 

Это, как я войти:

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13')] 
username = "user" 
password = "pass" 
USER_ID = '6' 

    loginonsite = login("http://mysite.com/myprofile.php", 
         "login_username=%s&login_password=%s&suid=%s".format(username, password, USER_ID) 

)

+0

1. Это, похоже, не имеет ничего общего с python! 2. У вас не может быть параметров GET в запросе POST. Это не работает HTTP! – boxed

ответ

5

Вы можете использовать запросы, чтобы сделать пост.

import requests 
data = {'Category' : '2', 'suid' : '19', 'deletetree' : '6', 'pushed' : 'Delete+Tree' } 
response = requests.post('http://mysite.com/management.php', data=data) 

print response.text 

Поскольку все больше и больше содержания веб-страницы генерируется в JavaScript Я считаю себя, используя WebDriver Selenium, чтобы непосредственно управлять реальный браузер, такой как Chrome, когда я делаю такой автоматизации теперь ...

Update: Похоже, вам нужно войти в первую

Теперь запросы могут пройти через куки, а также. Таким образом, вы отправить вошедшие в запросе вы могли бы сделать это

login_data = data={'username': 'user', 'password': 'pass' 
post_data = { 
    'Category' : '2', 'suid' : '19', 'deletetree' : '6', 'pushed' : 'Delete+Tree' 
} 
login_response = requests.get('http://mysite.com/myprofile.php', data=login_data) 
form_response = requests.post(
    'http://mysite.com/management.php', 
    data=post_data, 
    cookies=login_response.cookies 
) 

Таким образом, вы делаете логин, а затем использовать кук в ответ на следующем запросе. Должно сработать. Но, очевидно, я не могу проверить этот код для вашей точной ситуации.

+0

Python намного быстрее, чем Selenium Webdriver, поэтому я начал изучать этот язык. Код возвращает страницу с ошибкой, поэтому я думаю, что ссылка не построена по-разному. –

+0

Или вам нужен файл cookie сеанса, или вам нужен csrftoken ... поэтому почему я часто использую webdriver. Один трюк - использовать его с Xvfb, буфером виртуальных кадров. Таким образом, вы можете использовать его на безгласных серверах. – aychedee

+0

Какая ошибка дает страница? 500 или 404? объект ответа имеет атрибут '.status_code'. – aychedee

Смежные вопросы