如何使用Python+Selenium自动填充表单中的手机号码字段
解决方案
你只需要新增手机号文件读取逻辑即可,具体操作和修改后的代码如下:
前置准备
- 在代码同级目录创建
phones.txt文件,每行写入一个有效手机号,不要留多余空行或空格。
代码修改说明
- 所有通过
readlines()读取的文本都需要调用.strip()方法,去除每行末尾自带的换行符,避免填入表单时出现多余字符导致校验失败 - 推荐使用
with上下文管理器读取文件,避免文件句柄泄漏 - 手机号字段替换为从
phones.txt随机读取的内容
修改后完整代码
import time import random from selenium import webdriver # 注意Windows路径加r前缀避免转义问题 browser = webdriver.Firefox(executable_path = r'C:\Program Files\geckodriver-v0.30.0\geckodriver.exe') browser.get("http://nrpgov.ru/") xpath = '/html/body/form/div[4]/div/div/div/div[4]/div[1]/div[2]/a' browser.find_element_by_xpath(xpath).click() # 读取姓氏 surname_xpath = '/html/body/form/div[7]/div/div/div[2]/div/div/table/tbody/tr[1]/td/table/tbody/tr/td[2]/table/tbody/tr[1]/td/table/tbody/tr/td/input' with open('surnames.txt', encoding='utf-8') as f: lastname = [line.strip() for line in f.readlines() if line.strip()] browser.find_element_by_xpath(surname_xpath).send_keys(random.choice(lastname)) # 读取名字 name_xpath = '/html/body/form/div[7]/div/div/div[2]/div/div/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[1]/td/table/tbody/tr/td/input' with open('boys.txt', encoding='utf-8') as f: names = [line.strip() for line in f.readlines() if line.strip()] browser.find_element_by_xpath(name_xpath).send_keys(random.choice(names)) # 生成TIN号 inn_xpath = '/html/body/form/div[7]/div/div/div[2]/div/div/table/tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[1]/td/table/tbody/tr/td/input' inn_random = random.randint(1000000000, 9999999999) browser.find_element_by_xpath(inn_xpath).send_keys(str(inn_random)) # 读取手机号 number_xpath = '/html/body/form/div[7]/div/div/div[2]/div/div/table/tbody/tr[5]/td/table/tbody/tr/td[2]/table/tbody/tr[1]/td/table/tbody/tr/td/input' with open('phones.txt', encoding='utf-8') as f: phones = [line.strip() for line in f.readlines() if line.strip()] browser.find_element_by_xpath(number_xpath).send_keys(random.choice(phones)) # 读取邮箱 email_xpath = '/html/body/form/div[7]/div/div/div[2]/div/div/table/tbody/tr[6]/td/table/tbody/tr/td[2]/table/tbody/tr[1]/td/table/tbody/tr/td/input' with open('mails.txt', encoding='utf-8') as f: mails = [line.strip() for line in f.readlines() if line.strip()] browser.find_element_by_xpath(email_xpath).send_keys(random.choice(mails)) send_xpath = '/html/body/form/div[7]/div/div/div[3]/div/div/span' browser.find_element_by_xpath(send_xpath).click()
额外注意事项
- 如果你使用的是selenium 4.0及以上版本,
find_element_by_xpath方法已被弃用,可以替换为browser.find_element(By.XPATH, xpath),使用前需要先导入from selenium.webdriver.common.by import By - 若点击提交后无反应,可以在点击前加少量延时
time.sleep(1)避免页面还未加载完成就执行操作
内容的提问来源于stack exchange,提问作者em0ji
相关产品推荐
相关产品推荐

