web-dev-qa-db-ja.com

Seleniumまたはリクエストを使用してフォームに入力する

私は 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()

次に、ランボーモードに移行しました:)パスワードスペースを埋めることができない理由と、リクエストを使用してフォームの非表示の値が何であるかを理解しようとすると、これはコードです。

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)    

しかし、空の辞書を受け取っただけです。ログインとスクレイプを使用してサイトにアクセスするための最良の方法は何ですか?

6
Sátiro

URLにアクセスしたらhttps://www.santandertotta.pt/pt_PT/Particulares.html最初に、テキストLoginの付いた要素をクリックする必要があります。次にNomeおよびPasswordフィールドのみが表示されますが、これらのフィールドにアクセスするにはwsを誘発するWebDriverWaitとして、idを使用してフレームに切り替える必要があります。次に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()

ここで関連するディスカッションを見つけることができます iframeの下で#documentを処理する方法

3
DebanjanB

メインページに存在しないため、パスワードフィールドにアクセスできません。パスワードフィールドを処理するには、ログインボタンをクリックしてログインページに移動する必要があります。また、認証フォームを含む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()
4
Andersson