如何使用 Python 自动化 Web 表单填写
如今,每个人都想要您的数据,因此如果您想开设新帐户、参加促销活动或获取免费电子书,则必须填写包含您的信息的表格。
如果您只执行一次,这不是一个大问题,但如果您必须经常重复相同的过程,它就会变得单调,因此理想的答案是使用 Python 🐍实现自动化。
让我们使用 Python 自动填写 Web 表单。我们将首先了解如何使用 Python 列表中的数据填写表单,然后我将向您展示如何制作虚假数据来填写多个表单。
如何使用 Python 自动化 Web 表单填写
为了使用 Python 自动化 Web 表单,我们将利用 Selenium 库。要安装它,请按照以下步骤操作。
本书中涵盖的所有 Selenium 方法都可以在我的 Automation Cheatsheet(免费 PDF)中找到。
1. 设置硒
打开终端并键入以下命令来安装 Selenium。
pip install selenium
这将安装 Selenium 4,这是我们将在本教程中使用的版本。
然后我们必须获取chromedriver:
- 验证您的 Google Chrome 版本(在 Chrome 上,单击三个点,然后单击“帮助”,然后单击“关于 Google Chrome”)。
- 在此处下载正确的 Chromedriver(在任何 Chrome 升级后,您必须再次下载 Chromedriver 文件)。
- 解压缩驱动程序并复制 Chromedriver 文件的位置。
2. 填写 Google 表单
让我们开始导入将用于此自动化的库。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
然后我们创建一个path
chromedriver 文件,即我们想要自动化的网站,以及一个driver
允许我们使用 Selenium 与网站进行通信的文件。
网站:对于这个简单的演示,我们将使用 Google 表单中的“联系信息”模板。
确保复制链接。
如果链接损坏或停止工作,请转到 Google 表单并使用下面的模板使用您自己的链接创建您自己的表单。
注意:如果您创建自己的表单,请确保取消选中或关闭“设置”中的“限制为 1 个回复”选项,以便我们可以填写任意数量的表单。
以下是我们为开始使用 Selenium 所做的变量。
path = '/Users/.../chromedriver' # paste your path here
service = Service(executable_path=path)
website = 'https://forms.gle/GRgxTrG8FfXUCLE99' # paste your link
driver = webdriver.Chrome(service=service)
之后,我们使用该driver.get()
功能使用Selenium打开网站。
driver.get(website)
我们还添加等待或延迟,以允许网页加载所有信息。为此,我们导入该time
模块。
import time
time.sleep(3) # 3 seconds delay
代码现在应该如下所示:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
import pandas as pd
path = '/Users/.../chromedriver' # your path
service = Service(executable_path=path)
website = # your link
driver = webdriver.Chrome(service=service)
driver.get(website)
time.sleep(3)
要使用Selenium填写信息,我们必须首先检查网站。
检查“名称”字段。为此,右键单击网页第一个块中的任何空白部分,然后选择“检查”。
所有最新的网络浏览器都提供此选项。它将在屏幕右侧打开开发人员工具窗口。
您看到的是网站的 HTML 内容。
无论您的计算机上突出显示哪个元素,我们都将使用带有data-params
属性名称的元素,因为它包含我们正在查找的字段名称(例如,姓名、电子邮件、地址、电话号码、评论)。
现在让我们为“ Name ”字段创建 XPath 。XPath 的语法如下:
此外,我们将使用该contains()
函数,因此我们的 XPath 将是:
//div[contains(@data-params, "Name")]
我们现在必须检查占位符“您的答案”所在的字段。
与其他网站不同,Google 表单保持不一致的模式,其中某些字段(例如“电子邮件”)具有标签<input>
,而其他字段(例如“地址”)具有标签<textarea>
。
带有“您的答案”占位符的字段的最终 XPath将与带有<input>
和<textarea>
标签的字段不同。
//div[contains(@data-params, "Name")]//textarea //div[contains(@data-params, "Name")]//input
为了连接它们,我们将使用“或”条件|
//div[contains(@data-params, "Name")]//textarea | //div[contains(@data-params, "Name")]//input
为了填写数据,我们将使用.find_element
和.send_keys
函数。
text_input = driver.find_element(by='xpath',
value='//div[contains(@data-params, "Name")]//textarea | '
'//div[contains(@data-params, "Name")]//input')
text_input.send_keys("Write your text here")
3. 使用虚假数据创建一个列表并填写所有字段。
还有其他 Python 工具,例如faker
,可以帮助我们生成假数据(我将在最后向您展示 faker 是如何工作的),但为了简单起见,让我们自己在列表中构造数据,然后将其存储在字典中。
fields = ['Name', 'Email', 'Address', 'Phone number', 'Comments']
data = ['Frank', 'frank@example.com', '123 St', '987654321', 'Hello World']
my_form = dict(zip(fields, data))
为了将这些数据填充到我们表单的所有字段中,我们在 for 循环中使用.find_element
和函数。.send_keys
for field, data in my_form.items():
text_input = driver.find_element(by='xpath',
value=f'//div[contains(@data-params, "{field}")]//textarea | '
f'//div[contains(@data-params, "{field}")]//input')
text_input.send_keys(data)
4. 提交表格。
我们快完成了。接下来,我们必须单击“提交”按钮。
.click
使用 Selenium,我们在使用该方法实际单击“提交”按钮之前检查按钮以生成其 XPath 。
submit_button = driver.find_element(by='xpath',
value='//div[@role="button"]//span[text()="Submit"]')
submit_button.click()
注意:如果您将浏览器设置为另一种语言,则属性内的值text()
很可能采用该语言。例如,因为我的浏览器是西班牙语,所以我必须将 XPath 的一部分更改为//span[text()="Enviar"]
.
这是我们到目前为止编写的代码。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
path = '/Users/.../chromedriver' # your path goes here
service = Service(executable_path=path)
website = # your link goes here
driver = webdriver.Chrome(service=service)
fields = ['Name', 'Email', 'Address', 'Phone number', 'Comments']
data = ['Frank', 'frank@example.com', '123 St', '987654321', 'Hello World']
my_form = dict(zip(fields, data))
driver.get(website)
time.sleep(3)
for field, data in my_form.items():
text_input = driver.find_element(by='xpath',
value=f'//div[contains(@data-params, "{field}")]//textarea | '
f'//div[contains(@data-params, "{field}")]//input')
text_input.send_keys(data)
submit_button = driver.find_element(by='xpath', value='//div[@role="button"]//span[text()="Submit"]')
submit_button.click()
time.sleep(1)
driver.quit()
耶!👏 恭喜您,您现在了解了如何使用 🐍 自动填写网页表单。
现在,您可以更进一步,提交数百份包含虚构数据的表单。
结论
现在您已经了解了基础知识,您可以跳到下面视频的第 13:26 分钟,了解如何使用 Python 生成虚构数据并提交数百个表单。
有关使用数据自动提交表格的更多信息和详细视频,请单击此处。
这就是今天的全部内容!👋
- 点赞
- 收藏
- 关注作者
评论(0)