Заполните ввод текста типа и нажмите submit, используя python
У меня есть этот html:
<input type="text" class="txtSearch">
<input type="submit" value="Search" class="sbtSearch">
Мне нужно написать в текстовом поле, а затем нажать кнопку submit, используя python. Входные теги не находятся внутри Форма. Как я мог это сделать?
Ответы
Ответ 1
Вам не нужно заполнять поля и 'click' submit. Вы можете имитировать представление и получить желаемые результаты.
Используйте BeautifulSoup и urllib вместе с firebug в Firefox. Наблюдайте за сетевым трафиком с firebug и получите параметры post из HTTP POST, которые отправляет dong. Создайте dict и url-encode. Передайте его вместе с запросом вашего URL.
Например:
from BeautifulSoup import BeautifulSoup
import urllib
post_params = {
param1 : val1,
param2 : val2,
param3 : val3
}
post_args = urllib.urlencode(post_params)
url = 'http://www.website.com/'
fp = urllib.urlopen(url, post_args)
soup = BeautifulSoup(fp)
Параметр vals изменится в соответствии с тем, что вы пытаетесь отправить. Сделайте подходящие номера в своем коде.
Ответ 2
Здесь селеновое решение, если вам действительно нужно заполнить поля. Однако вам, как правило, понадобится только это для тестирования.
from selenium import webdriver
webpage = r"https://www.yourwebsite.com/" # edit me
searchterm = "Hurricane Sandy" # edit me
driver = webdriver.Chrome()
driver.get(webpage)
sbox = driver.find_element_by_class_name("txtSearch")
sbox.send_keys(searchterm)
submit = driver.find_element_by_class_name("sbtSearch")
submit.click()
Ответ 3
ОБНОВЛЕНО 2019 ответ. Этот код также заботится об ошибках HTTP 403 Forbidden
.
import urllib.request as urlRequest
import urllib.parse as urlParse
url = "https://yoururl.com"
values = {"name": "value"}
# pretend to be a chrome 47 browser on a windows 10 machine
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"}
# encode values for the url
params = urlParse.urlencode(values).encode("utf-8")
# create the url
targetUrl = urlRequest.Request(url=url, data=params, headers=headers)
# open the url
x = urlRequest.urlopen(targetUrl)
# read the response
respone = x.read()
print(respone)
Ответ 4
Мне нравится решение kev, потому что лично мне нравится идея сделать все возможное в urllib, где это возможно.
Тем не менее, ссылаясь на решение КЕВ;
-
На странице с несколькими текстовыми полями и, возможно, несколькими кнопками, которые могут отправлять данные. Как указать, какое текстовое поле/текстовое поле заполнять?
-
Точно так же, если на странице есть несколько кнопок, которые будут публиковать данные из определенных текстовых полей, где вы указываете, какой запрос отправлять относительно какой кнопки была бы нажата?