如何使用 Python 自动化 Web 表单填写

Q神日志 2023-06-23 12:24:34

如今,每个人都想要您的数据,因此如果您想开设新帐户、参加促销活动或获取免费电子书,则必须填写包含您的信息的表格。

如果您只执行一次,这不是一个大问题,但如果您必须经常重复相同的过程,它就会变得单调,因此理想的答案是使用 Python 🐍实现自动化。

让我们使用 Python 自动填写 Web 表单。我们将首先了解如何使用 Python 列表中的数据填写表单,然后我将向您展示如何制作虚假数据来填写多个表单。

如何使用 Python 自动化 Web 表单填写

为了使用 Python 自动化 Web 表单,我们将利用 Selenium 库。要安装它,请按照以下步骤操作。

本书中涵盖的所有 Selenium 方法都可以在我的 Automation Cheatsheet(免费 PDF)中找到。

1. 设置硒

打开终端并键入以下命令来安装 Selenium。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>pip install selenium
</code></span></span>

 

这将安装 Selenium 4,这是我们将在本教程中使用的版本。

然后我们必须获取chromedriver:

  • 验证您的 Google Chrome 版本(在 Chrome 上,单击三个点,然后单击“帮助”,然后单击“关于 Google Chrome”)。
  • 在此处下载正确的 Chromedriver(在任何 Chrome 升级后,您必须再次下载 Chromedriver 文件)。
  • 解压缩驱动程序并复制 Chromedriver 文件的位置。

2. 填写 Google 表单

让我们开始导入将用于此自动化的库。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
</code></span></span>

 

然后我们创建一个pathchromedriver 文件,即我们想要自动化的网站,以及一个driver允许我们使用 Selenium 与网站进行通信的文件。

网站:对于这个简单的演示,我们将使用 Google 表单中的“联系信息”模板。

确保复制链接。

如果链接损坏或停止工作,请转到 Google 表单并使用下面的模板使用您自己的链接创建您自己的表单。

文本

注意:如果您创建自己的表单,请确保取消选中或关闭“设置”中的“限制为 1 个回复”选项,以便我们可以填写任意数量的表单。

以下是我们为开始使用 Selenium 所做的变量。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>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)
</code></span></span>

 

之后,我们使用该driver.get()功能使用Selenium打开网站。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>driver.get(website)
</code></span></span>

 

我们还添加等待或延迟,以允许网页加载所有信息。为此,我们导入该time模块。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>import time
time.sleep(3) # 3 seconds delay
</code></span></span>

 

代码现在应该如下所示:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>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)
</code></span></span>

 

要使用Selenium填写信息,我们必须首先检查网站。

检查“名称”字段。为此,右键单击网页第一个块中的任何空白部分,然后选择“检查”。

文本

所有最新的网络浏览器都提供此选项。它将在屏幕右侧打开开发人员工具窗口。

您看到的是网站的 HTML 内容。

无论您的计算机上突出显示哪个元素,我们都将使用带有data-params属性名称的元素,因为它包含我们正在查找的字段名称(例如,姓名、电子邮件、地址、电话号码、评论)。

文本

现在让我们为“ Name ”字段创建 XPath 。XPath 的语法如下:

文本

此外,我们将使用该contains()函数,因此我们的 XPath 将是:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>//div[contains(@data-params, "Name")]
</code></span></span>

 

我们现在必须检查占位符“您的答案”所在的字段。

与其他网站不同,Google 表单保持不一致的模式,其中某些字段(例如“电子邮件”)具有标签<input>,而其他字段(例如“地址”)具有标签<textarea>

 

动图文本

 

带有“您的答案”占位符的字段的最终 XPath将与带有<input><textarea>标签的字段不同。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>//div[contains(@data-params, "Name")]//textarea //div[contains(@data-params, "Name")]//input
</code></span></span>

 

为了连接它们,我们将使用“”条件|

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>//div[contains<span style="color:var(--syntax-error-color)">(</span>@data-params, <span style="color:var(--syntax-string-color)">"Name"</span><span style="color:var(--syntax-error-color)">)]</span>//textarea | //div[contains<span style="color:var(--syntax-error-color)">(</span>@data-params, <span style="color:var(--syntax-string-color)">"Name"</span><span style="color:var(--syntax-error-color)">)]</span>//input
</code></span></span>

 

为了填写数据,我们将使用.find_element.send_keys函数。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>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")
</code></span></span>

 

3. 使用虚假数据创建一个列表并填写所有字段。

还有其他 Python 工具,例如faker,可以帮助我们生成假数据(我将在最后向您展示 faker 是如何工作的),但为了简单起见,让我们自己在列表中构造数据,然后将其存储在字典中。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>fields = ['Name', 'Email', 'Address', 'Phone number', 'Comments']
data = ['Frank', 'frank@example.com', '123 St', '987654321', 'Hello World']
my_form = dict(zip(fields, data))
</code></span></span>

 

为了将这些数据填充到我们表单的所有字段中,我们在 for 循环中使用.find_element和函数。.send_keys

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">for </span>field, data <span style="color:var(--syntax-declaration-color)">in </span>my_form.items<span style="color:var(--syntax-error-color)">()</span>:
    text_input <span style="color:var(--syntax-error-color)">=</span> driver.find_element<span style="color:var(--syntax-error-color)">(</span><span style="color:var(--syntax-text-color)">by</span><span style="color:var(--syntax-error-color)">=</span><span style="color:var(--syntax-string-color)">'xpath'</span>,
                                     <span style="color:var(--syntax-text-color)">value</span><span style="color:var(--syntax-error-color)">=</span>f<span style="color:var(--syntax-string-color)">'//div[contains(@data-params, "{field}")]//textarea | '</span>
                                           f<span style="color:var(--syntax-string-color)">'//div[contains(@data-params, "{field}")]//input'</span><span style="color:var(--syntax-error-color)">)</span>
    text_input.send_keys<span style="color:var(--syntax-error-color)">(</span>data<span style="color:var(--syntax-error-color)">)</span>
</code></span></span>

 

4. 提交表格。

我们快完成了。接下来,我们必须单击“提交”按钮。

文本

.click使用 Selenium,我们在使用该方法实际单击“提交”按钮之前检查按钮以生成其 XPath 。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>submit_button = driver.find_element(by='xpath',
                                    value='//div[@role="button"]//span[text()="Submit"]')
submit_button.click()
</code></span></span>

 

注意:如果您将浏览器设置为另一种语言,则属性内的值text()很可能采用该语言。例如,因为我的浏览器是西班牙语,所以我必须将 XPath 的一部分更改为//span[text()="Enviar"].

这是我们到目前为止编写的代码。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>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()
</code></span></span>

 

耶!👏 恭喜您,您现在了解了如何使用 🐍 自动填写网页表单。

现在,您可以更进一步,提交数百份包含虚构数据的表单。

结论

现在您已经了解了基础知识,您可以跳到下面视频的第 13:26 分钟,了解如何使用 Python 生成虚构数据并提交数百个表单。

有关使用数据自动提交表格的更多信息和详细视频,请单击此处。

这就是今天的全部内容!👋

 

...全文
382 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6

社区成员

发帖
与我相关
我的任务
社区描述
分享
java-rocketmqpygame前端 个人社区 广东省·广州市
社区管理员
  • Q shen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧