使用selenium或请求填写表单

问题描述 投票:5回答:2

我正在尝试输入this site来检索我的银行帐户,首先我尝试使用selenium,但只填充用户名(可能因为它有2个表单):

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.santandertotta.pt/pt_PT/Particulares.html")
user = driver.find_element_by_name("usr")
user.send_keys("user")
pas = driver.find_element_by_name("claveConsultiva")
pas.send_keys("password")
login = driver.find_element_by_id("login_button").click()

然后,我走了rambo模式:)尝试找出为什么我不能填写密码空间,以及使用请求的表单的隐藏值是什么,这是代码:

url = "https://www.particulares.santandertotta.pt/pagina/indice/0,,276_1_2,00.html"     
user_agent = {"user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/..."}
session = requests.session()
r = session.get(url)
soup = BeautifulSoup(r.text, "html.parser")    
data = {t['name']:t.get('value') for t in soup.find_all('input', attrs={'type': 'hidden'})}
print(data)    

但刚收到一个空头。使用登录和抓取进入网站的最佳方法是什么?

python python-3.x selenium web-scraping python-requests
2个回答
2
投票

一旦你首先访问url https://www.santandertotta.pt/pt_PT/Particulares.html,你必须点击带有文本的元素作为Login,然后只显示Nome和Password字段,但要访问这些文件,你必须切换到id的框架,因为它会导致WebDriverWait。接下来要找到Nome的元素,你必须再次引入WebDriverWait,如下所示:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get("https://www.santandertotta.pt/pt_PT/Particulares.html")
driver.find_element_by_xpath("//input[@class='ttAH_button03']").click()
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "ws")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='inputlong' and @id='identificacionUsuario']"))).send_keys("your_name")
driver.find_element_by_xpath("//input[@id='claveConsultiva' and @name='claveConsultiva']").send_keys("your_password")
driver.find_element_by_link_text("Entrar no NetBanco Particulares").click()

在这里你可以找到关于Ways to deal with #document under iframe的相关讨论


2
投票

您无法访问密码字段,因为它不在主页上。要处理密码字段,您必须单击“登录”按钮才能进入“登录”页面。您还需要切换到包含身份验证表单的iframe

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

driver.get("https://www.santandertotta.pt/pt_PT/Particulares.html")
driver.find_element_by_xpath("//input[@title='Login de Particulares']").click()
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("ws"))
user = driver.find_element_by_name("identificacionUsuario")
user.send_keys("user")
pas = driver.find_element_by_name("claveConsultiva")
pas.send_keys("password")
pas.submit()
© www.soinside.com 2019 - 2024. All rights reserved.