web-dev-qa-db-ja.com

タイプテキストの入力を入力し、python

私はこのhtmlを持っています:

<input type="text" class="txtSearch">
<input type="submit" value="Search" class="sbtSearch">

必要なのは、テキストフィールドに入力してから、Pythonを使用して送信をクリックすることです。入力タグが内部にありませんフォーム。どうすればそれができますか?

12
a1204773

実際にフィールドに入力して「クリック」して送信する必要はありません。送信をシミュレートして、目的の結果を得ることができます。

Firefoxのfirebugと一緒に BeautifulSoup とurllibを使用します。 Firebugでネットワークトラフィックを監視し、HTTP POSTから送信がドンであることを示すpostパラメータを取得します。dictを作成してurlエンコードします。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)

パラメータ値は、送信しようとしているものに応じて変化します。コードに適切な調整を加えます。

14
That1Guy

実際にフィールドにデータを入力する必要がある場合は、Seleniumソリューションを次に示します。ただし、これは通常、テスト目的でのみ必要になります。

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()
8
kreativitea

[〜#〜]更新[〜#〜] 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)
2
kev