如何使用Python填写网站上的HTML输入字段

时间:2019-09-16 23:41:11

标签: python python-3.x beautifulsoup python-requests urllib

我正在尝试创建一个程序,该程序会将生成的字符串输入到网站上的字段中。但是,我要输入的输入不是表单,只是一个通向JavaScript脚本的文本框。

https://support.logi.com/hc/en-us/requests/new?ticket_form_id=360000621393 是我要使用的网站的URL。我想在序列号字段中输入序列号,然后单击“提交”

当我使用Chrome浏览器检查网络时,看到输入的字符串属于带有“验证码”字段的“查询字符串参数”类别。我尝试使用请求库发送带有参数的GET请求,但是它不起作用,因为当我打印响应HTML时,它与预期的内容不匹配。我可能不知道我做错了什么。

import requests
from bs4 import BeautifulSoup

#I saw headers so I added headers
headers= {
    'Content-Type': 'application/json',
    'DNT': '1',
    'Sec-Fetch-Mode': 'cors',
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36' 
}

#This is the data, I am trying to input 'hello' into the field
serial_data = {
    'serial_number': 'hello',
    'locale': 'en-us'
}

#I am sending the data
with requests.Session() as s:
    url = "URL OF SITE"
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    r = s.get(url, data=serial_data, headers=headers)         
    print(r.content)

我要输入的HTML是:

<input type="text" name="find-serial" id="serial-number" value="" class="form-input"> <p style="">No matching serial number.</p></div>

我希望r.content将在输入有效代码后包含结果页面的HTML,以便能够使用BeautifulSoup进行处理。

1 个答案:

答案 0 :(得分:0)

要与网页进行交互并插入文本,请考虑使用Selenium WebDriver

除了安装selenium,您还需要下载WebDriver二进制文件。例如,here可以使用Google Chrome驱动程序。

要将文本提交到该字段,您可以尝试以下操作:

from selenium import webdriver

browser = webdriver.Chrome("path-to-chromedriver-binary")

browser.get("URL OF SITE")
find_serial = browser.find_element_by_id("serial-number")
find_serial.send_keys("Text you want to send")
相关问题