2014-10-08 2 views
2

Я пытаюсь написать простого бота, который будет входить в мою учетную запись на странице, а затем комментировать изображения других пользователей. Однако я не могу правильно подать форму комментариев. Форма комментария выглядит следующим образом:Python mechanize form submit не работает

<form id="comment-form" action="#" onsubmit="postComment($(this).serialize(),'image',117885,229227); return false;"> 
    <input class="comment" type="text" size="40" name="comment" id="comment" /> 
    <input type="hidden" name="commentObj" value="9234785" /> 
    <input type="hidden" name="commentMode" value="image" /> 
    <input type="hidden" name="userid" value="12427" /> 
    <input class="submit" type="submit" value="Comment" /> 
</form> 

Мой код выглядит следующим образом

br.select_form(nr = 1) 
br.form['comment'] = 'hello' 
br.submit() 

страница имеет две формы и форма комментария является второй один. Поэтому я уверен, что выбрал правильную форму. Может ли кто-нибудь объяснить, почему это не работает?

+0

разработка «не работает» часть может значительно увеличить ваши шансы на получение хорошего ответа. – bereal

ответ

3

Существует Javascript код выполняется в то время как форма Представлять происходит:

onsubmit="postComment($(this).serialize(),'image',117885,229227); return false;" 

mechanize просто не может справиться с этим, так как это не браузер, и это не имеет JavaScript двигателя внутри.

Возможные решения:

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

    from selenium import webdriver 
    
    driver = webdriver.Firefox() 
    dirver.get('my_url_here') 
    
    comment = driver.find_element_by_id('comment') 
    comment.send_keys('hello') 
    comment.submit() # this would find an enclosing form and submit it 
    
  • исследовать, какие запросы (ы) отправляются на сервер при отправке события формы. Затем автоматизируйте запрос (запросы), используя, например, requests.

Надеюсь, что это поможет.

0

Если я хорошо понимал, вы должны попробовать с этим изменил код

br.select_form(nr = 1) 
br['comment'] = 'hello' 
br.submit() 
Смежные вопросы