Python Request_html отправить форму, нажав кнопку с помощью JQuery
Я изучаю Kenneth Reitz's request_html и пытаюсь отправить форму визуализированной веб-страницы JS с помощью Jquery. Я не уверен, как это сделать, но вот моя попытка:
from requests_html import HTMLSession
url = "https://example.com"
session = HTMLSession()
r = session.get(url)
r.html.render()
script = """
() => {
$("#some_input_field").val("Some value");
$("#submit_button").click();
}
"""
r.html.render(script=script, reload=False)
Но значение не устанавливается в поле ввода и оно не отправляет форму... Есть ли способ имитировать нажатие кнопки или отправку формы через xhr
в request_html?
Например: если мы используем селен, мы можем довольно легко смоделировать нажатие кнопки, набрав:
element.click()
2 ответа
Хорошо, в моем случае работает следующий код:
from requests_html import HTMLSession
url = "https://example.com"
session = HTMLSession()
r = session.get(url)
r.html.render()
script = """
() => {
if ( jQuery.isReady ) {
$("#some_input_field").val("Some value");
$("#submit_button").click();
}
}
"""
r.html.render(script=script, reload=False)
РЕДАКТИРОВАТЬ: лучший подход должен быть:
from requests_html import HTMLSession
url = "https://example.com"
session = HTMLSession()
r = session.get(url)
r.html.render()
script = """
() => {
$(document).ready(function() {
$("#some_input_field").val("Some value");
$("#submit_button").click();
})
}
"""
r.html.render(script=script, reload=False)
Приведенные ниже утверждения не были сделаны мной, но помогли решить проблему. Спасибо ответу alairjunior по этому вопросу .
Я не смог использовать события load и DOMContentLoaded. Пока не исследовал почему. Я подозреваю, что скрипт запускается с помощью «консоли», поэтому он не может получить эти события. Но это всего лишь дикая догадка.
Для быстрого и грязного решения я смог использовать setTimeout:
script = """
() => {
setTimeout(function(){
document.querySelectorAll("a")[2].click();
}, 3000);
}
"""
Если я используюr.html.render(sleep=10,script=script)
Я могу получить содержимое страницы после выполнения клика.
Надеюсь, это полезно.